GDI Editor 2 [in Entwicklung]

  • [Blockierte Grafik: http://www11.pic-upload.de/17.01.15/8ca7qqjaj7f5.png]

    Guten Abend
    Ich stelle euch ein Programm vor mit dem Ihr mit GDI und GDIPlus zeichnen könnt.
    Das Programm befindet sich in der Entwicklung. Zurzeit kann man nur Rechtecke, Ellipsen und Linien zeichnen. Die Füllfarbe, Linienbreite, Linienfarbe kann festgelegt werden.
    Alle Objekte können selektiert,kopiert, eingefügt, gelöscht, frei bewegt und transformiert werden. Ihr könnt euer Projekt speichern und später wieder öffnen. Ihr könnt das Ergebnis als Bild speichern oder für AutoIt die GDI Zeichenfunktionen exportieren.
    Ein Gitter zur übersicht kann induviduell angepasst werden.

    Getestet unter Microsoft Windows XP 32Bit SP3 ; AutoIt v.3.3.10.2

    Das Programm befindet sich im Anhang

    PS: Bitte alle Fehler und Vorschläge posten damit ich diese Beheben bzw. Umsetzen kann

  • Hallo :)
    Da hast du dir ja ein tolles Projekt ausgesucht. Das kann ja was werden!

    Folgendes habe ich beim herumspielen festgestellt:
    > Die Werkzeugleiste funktioniert nicht. Ich schätze das hast du noch nicht implantiert oder? Steht ja auch im Titel dass du noch in der Entwicklung bist.
    > Man kann den z-Index der Objekte leider nicht verändern. Dadurch kann ich nachträglich nicht entscheiden welches Element jetzt vor welches soll. Macht man einen Fehler und bemerkt es zu spät dann kann man unter Umständen viele Objekte wieder löschen.
    > Auch das Umbenennen der Objekte funktioniert nicht. Dieses Feature könntest du eventuell auf deine ToDo-Liste setzen falls noch nicht getan. Wäre praktisch weil man sonst den Überblick verlieren könnte.
    > Wähle ich ein Objekt mit dem Auswahlwerkzeug aus, so werden auch alle darunter befindlichen Objekte ausgewählt. Da würde ich mehr Entscheidungsfreiheit lassen ob nur das angeklickte oder tatsächlich alle Objekte die die Position (x|y) schneiden ausgewählt werden sollten.
    > Bei der Auswahl einer Ellipse kannst du auch außerhalb des eigentliches Objektes klicken um es auszuwählen. Ich vermute du behandelst (unabhängig der Form) alle Objekte als Rechteck. Ist bei der Auswahl vielleicht von Nachteil, beim Verändern der Größe aber von Vorteil.
    > Der Objektinspektor aktualisiert sich leider nicht von selber, ich muss erst das Objekt erneut anklicken bevor die Werte für das ausgewählte Objekt wieder aktuell sind.
    > Derzeitig kann ich die einzelnen Fenster nicht mithilfe des Kreuzes oben Rechts schließen. Aber ich denke dass kommt auch noch, oder!? ^^
    > Das Exportieren als *.png Funktioniert nicht richtig. Ich hatte gerade eine Situation wo die Objekte nicht im Bild dargestellt wurden. Leider kann ich es aber nicht mehr rekonstruieren. Wenn mir das nochmal passiert sag ich Bescheid wie ich's angestellt habe damit du den Bug fixen kannst.
    > Was ein wenig umständlich ist, dass ich erst das Objekt mit dem Auswahlwerkzeug auswählen muss, um es mit dem Bewegungswerkzeug bewegen zu müssen. Da solltest du was ändern.
    > Als ich mit der Rechten Maustaste gerade in der Objektliste spielte, stürzte mir das Skript ab. Leider kann ich auch das nicht mehr rekonstruieren. Aber in der Fehlerbeschreibung stand, dass der Dimensionsbereich eines Arrays überschritten wurde. Fehlermeldung habe ich gerade nicht mehr. Auch hierzu sag ich Bescheid wenn ich weiß wie man den Fehler rekostruieren kann, damit du den Bug fixen kannst.
    > Wenn ich in der Objektliste ein Objekt mit der rechten Maustaste anklicke, wird es leider nicht direkt ausgewählt. Lässt sich da was machen?

    Okey, dass erst mal zu den Fehlern bzw. Verbesserungsvorschlägen. ^^
    Ansonsten finde ich das Skript in seinem derzeitigen Umfang gut gelungen. Besonders das exportieren als AutoIt Code ist sehr praktisch, ich freue mich schon wenn der Editor mal irgendwann fertig ist, das kann dann viel Arbeit mit GDI+ gedönse ersparen. Bin mal gespannt was hieraus wird! Ich verfolge das ganze mal.

  • Nettes Programm, dafür dass es noch einen frühren entwicklungsstatus hat.

    Aber ein kleiner Tipp: In der Close Funktion würde sich eine Abfrage wirklich besser machen... Man könnte auch noch abragen ob vorher gespeichert werden soll

    Spoiler anzeigen
    [autoit]

    func close()
    Local $iMsg = MsgBox(64 + 4, "GDI Editor 2", "Möchten Sie das Programm wirklich beenden?")
    If $iMsg = 6 Then
    ;dokument freisetzen
    document_free()

    [/autoit] [autoit][/autoit] [autoit]

    ;gdiplus schließen
    _GDIPlus_PenDispose($grid_pen)
    _GDIPlus_BrushDispose($brush)
    _GDIPlus_PenDispose($pen)
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    ;fenster schließen
    GUIDelete($window)

    [/autoit] [autoit][/autoit] [autoit]

    ;dll schließen
    DllClose($dll_user32)

    [/autoit] [autoit][/autoit] [autoit]

    ;programm beenden
    exit
    EndIf
    EndFunc

    [/autoit]
  • @ShitDown

    Danke fürs Feedback.
    Die Fehler bzw. Verbesserungsvorschläge sind allesamt sehr Hilfreich. Vielen Dank dafür.
    Ich versuche in nächster Zeit am Projekt weiter zuarbeiten und die Vorschläge umzusetzen.

    Welche Windows Version verwendest du? Die Werkzeugleiste sollte unter WinXP laufen

    @teamnoobPDB

    Danke. Tipp wird umgesetzt

  • Bei mir geht es interessanterweise auch nicht, obwohl ich (theoretisch) XP verwende:

    Code
    Systemspezifikationen
    Betriebssystem: WIN_XP Service Pack 3 en-US (X86)
    AutoIt: 3.3.12.0 (i386)


    Damit sollte es ja eigentlich gehen. Man muss aber dabei sagen, dass es sich nicht um ein richtiges Windows XP handelt, sondern um Wine unter Debian Jessie Testing.

  • Wenn man die notify Funktion so abändert sollte es überall funtionieren:

    Spoiler anzeigen
    [autoit]

    func notify($hwnd,$msg,$wparam,$lparam)
    Local $hmouse
    Switch $hwnd
    ;fenster werkzeug
    case WinGetHandle($window_tool), $window_tool
    $hmouse = GUIGetCursorInfo($window_tool)
    if $hmouse[2] then
    $tool_current = _GUICtrlToolbar_GetHotItem($toolbar_tool)

    [/autoit] [autoit][/autoit] [autoit]

    toolbar_check()
    endif
    ;fenster objektinspektor
    case WinGetHandle($window_object_inspector), $window_object_inspector
    Local $edit_label = _GUICtrlListView_GetEditControl($list_object_settings)

    [/autoit] [autoit][/autoit] [autoit]

    if $object_setting_current <> Null and $edit_label <> 0 Then
    ;eingabe
    $temp = $objects[$object_setting_current][$OBJECT_HANDLE]

    [/autoit] [autoit][/autoit] [autoit]

    Local $read = int(_GUICtrlEdit_GetText($edit_label))
    Local $attribute = _GUICtrlListView_GetSelectedIndices($list_object_settings)

    [/autoit] [autoit][/autoit] [autoit]

    if $read <> $temp[$attribute] Then
    $temp[$attribute] = $read
    endif

    [/autoit] [autoit][/autoit] [autoit]

    $objects[$object_setting_current][$OBJECT_HANDLE] = $temp
    endif

    [/autoit] [autoit][/autoit] [autoit]

    if $lparam = 0x008EEA90 Then
    ;objekteinstellungen
    object_settings($object_setting_current)
    EndIf
    EndSwitch
    EndFunc

    [/autoit]

    Nur einen haken hat das noch: Wenn man auf das Bewegen Tool klickt dann verschwindet das Fenster, das lässt dich aber über das MenuItem wieder herbeizaubern.