• Da hier vorgeschlagen wurde, einen GDI+ Live Editor zu machen, wollte ich versuchen, den Vorschlag zu realisieren.

    GDI+ LiveEditor
    [autoit]

    #include <GDIPlus.au3>
    #include <GDIPlusConstants.au3>
    #include <Misc.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MouseCoordMode", 2)

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

    Global $MainGUI[10], $CodeGUI[10], $CtrlGUI[10], $Code[10]
    Global $GDIPForm = "", $Direction[2]
    Global $Line[100][4], $Elli[100][4], $Rect[100][4]

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

    $MainGUI[0] = GUICreate("GDI+ LiveEditor", 300, 300, -1, -1)
    GUISetOnEvent(-3, "_Exit")
    GUISetCursor(16)
    GUISetState()

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

    _GDIPlus_Startup()
    $MainGUI[1] = _GDIPlus_GraphicsCreateFromHWND($MainGUI[0])
    $MainGUI[2] = _GDIPlus_BitmapCreateFromGraphics(300, 300, $MainGUI[1])
    $MainGUI[3] = _GDIPlus_ImageGetGraphicsContext($MainGUI[2])

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

    $CtrlGUI[0] = GUICreate("Controls", 290, 120, -1, -1, 0, 0x00000080, $MainGUI[0])
    $CtrlGUI[1] = GUICtrlCreateButton("None", 10, 10, 50, 50)
    GUICtrlSetOnEvent(-1, "_ChangeForm")
    $CtrlGUI[2] = GUICtrlCreateButton("Line", 70, 10, 50, 50)
    GUICtrlSetOnEvent(-1, "_ChangeForm")
    $CtrlGUI[3] = GUICtrlCreateButton("Ellipse", 130, 10, 50, 50)
    GUICtrlSetOnEvent(-1, "_ChangeForm")
    $CtrlGUI[4] = GUICtrlCreateButton("Rect", 190, 10, 50, 50)
    GUICtrlSetOnEvent(-1, "_ChangeForm")
    GUISetState()

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

    $CodeGUI[0] = GUICreate("Code Box", 400, 500, -1, -1, 0x00040000, 0x00000080, $MainGUI[0])
    $CodeGUI[1] = GUICtrlCreateEdit($Code[0], 0, 0, 398, 480)
    GUICtrlSetFont(-1, 9.5, 400, 0, "Courier New")
    GUICtrlSetResizing(-1, 102)
    GUISetState()

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

    While 1
    Sleep(10)
    _Update()
    If WinActive($MainGUI[0]) And $GDIPForm And _IsPressed(01) Then _NewForm()
    WEnd

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

    Func _Update()
    Local $MousePos = MouseGetPos()
    _GDIPlus_GraphicsClear($MainGUI[3], 0xFFFFFFFF)
    If WinActive($MainGUI[0]) Then
    _GDIPlus_GraphicsDrawLine($MainGUI[3], $MousePos[0] - 3, $MousePos[1], $MousePos[0] + 3, $MousePos[1])
    _GDIPlus_GraphicsDrawLine($MainGUI[3], $MousePos[0], $MousePos[1] - 3, $MousePos[0], $MousePos[1] + 3)
    EndIf

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

    If Not $Line[0][0] = 0 Then
    For $i = 1 To $Line[0][0]
    _GDIPlus_GraphicsDrawLine($MainGUI[3], $Line[$i][0], $Line[$i][1], $Line[$i][2], $Line[$i][3])
    Next
    EndIf

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

    If Not $Elli[0][0] = 0 Then
    For $i = 1 To $Elli[0][0]
    _GDIPlus_GraphicsDrawEllipse($MainGUI[3], $Elli[$i][0], $Elli[$i][1], $Elli[$i][2] - $Elli[$i][0], $Elli[$i][3] - $Elli[$i][1])
    Next
    EndIf

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

    If Not $Rect[0][0] = 0 Then
    For $i = 1 To $Rect[0][0]
    _GDIPlus_GraphicsDrawRect($MainGUI[3], $Rect[$i][0], $Rect[$i][1], $Rect[$i][2] - $Rect[$i][0], $Rect[$i][3] - $Rect[$i][1])
    Next
    EndIf
    _GDIPlus_GraphicsDrawImageRect($MainGUI[1], $MainGUI[2], 0, 0, 300, 300)
    EndFunc ;==>_Update

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

    Func _Exit()
    _GDIPlus_GraphicsDispose($MainGUI[3])
    _GDIPlus_BitmapDispose($MainGUI[2])
    _GDIPlus_GraphicsDispose($MainGUI[1])
    _GDIPlus_Shutdown()
    GUIDelete($MainGUI[0])
    Exit
    EndFunc ;==>_Exit

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

    Func _NewForm()
    Local $MousePos = MouseGetPos()
    If $GDIPForm = 1 Then
    $Line[0][0] += 1
    $Line[$Line[0][0]][0] = $MousePos[0]
    $Line[$Line[0][0]][1] = $MousePos[1]
    While _IsPressed(01)
    $MousePos = MouseGetPos()
    $Line[$Line[0][0]][2] = $MousePos[0]
    $Line[$Line[0][0]][3] = $MousePos[1]
    _Update()
    Sleep(10)
    WEnd
    If $Line[$Line[0][0]][0] = $Line[$Line[0][0]][2] And $Line[$Line[0][0]][1] = $Line[$Line[0][0]][3] Then $Line[0][0] -= 1
    ElseIf $GDIPForm = 2 Then
    $Elli[0][0] += 1
    $Elli[$Elli[0][0]][0] = $MousePos[0]
    $Elli[$Elli[0][0]][1] = $MousePos[1]
    While _IsPressed(01)
    $MousePos = MouseGetPos()
    $Elli[$Elli[0][0]][2] = $MousePos[0]
    $Elli[$Elli[0][0]][3] = $MousePos[1]
    _Update()
    Sleep(10)
    WEnd
    If $Elli[$Elli[0][0]][0] = $Elli[$Elli[0][0]][2] And $Elli[$Elli[0][0]][1] = $Elli[$Elli[0][0]][3] Then $Elli[0][0] -= 1
    $Direction[0] = 0
    $Direction[1] = 0
    ElseIf $GDIPForm = 3 Then
    $Rect[0][0] += 1
    $Rect[$Rect[0][0]][0] = $MousePos[0]
    $Rect[$Rect[0][0]][1] = $MousePos[1]
    While _IsPressed(01)
    $MousePos = MouseGetPos()
    If $Rect[$Rect[0][0]][0] > $MousePos[0] Or $Direction[0] = 1 Then
    If Not $Direction[0] Then
    $Rect[$Rect[0][0]][2] = $Rect[$Rect[0][0]][0]
    $Rect[$Rect[0][0]][0] = $MousePos[0]
    $Direction[0] = 1
    ElseIf $Rect[$Rect[0][0]][0] < $MousePos[0] Then
    $Rect[$Rect[0][0]][0] = $Rect[$Rect[0][0]][2]
    $Rect[$Rect[0][0]][2] = $MousePos[0]
    $Direction[0] = 0
    Else
    $Rect[$Rect[0][0]][0] = $MousePos[0]
    EndIf
    Else
    $Rect[$Rect[0][0]][2] = $MousePos[0]
    EndIf
    If $Rect[$Rect[0][0]][1] > $MousePos[1] Or $Direction[1] = 1 Then
    If Not $Direction[1] Then
    $Rect[$Rect[0][0]][3] = $Rect[$Rect[0][0]][1]
    $Rect[$Rect[0][0]][1] = $MousePos[1]
    $Direction[1] = 1
    ElseIf $Rect[$Rect[0][0]][1] < $MousePos[1] Then
    $Rect[$Rect[0][0]][1] = $Rect[$Rect[0][0]][3]
    $Rect[$Rect[0][0]][3] = $MousePos[1]
    $Direction[1] = 0
    Else
    $Rect[$Rect[0][0]][1] = $MousePos[1]
    EndIf
    Else
    $Rect[$Rect[0][0]][3] = $MousePos[1]
    EndIf
    _Update()
    Sleep(10)
    WEnd
    If $Rect[$Rect[0][0]][0] = $Rect[$Rect[0][0]][2] And $Rect[$Rect[0][0]][1] = $Rect[$Rect[0][0]][3] Then $Rect[0][0] -= 1
    $Direction[0] = 0
    $Direction[1] = 0
    EndIf

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

    _UpdateCode()
    EndFunc ;==>_NewForm

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

    Func _ChangeForm()
    If @GUI_CtrlId = $CtrlGUI[1] Then $GDIPForm = 0
    If @GUI_CtrlId = $CtrlGUI[2] Then $GDIPForm = 1
    If @GUI_CtrlId = $CtrlGUI[3] Then $GDIPForm = 2
    If @GUI_CtrlId = $CtrlGUI[4] Then $GDIPForm = 3
    EndFunc ;==>_ChangeForm

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

    Func _UpdateCode()
    $Code[0] = "#include <GDIPlus.au3>" & @CRLF & _
    "#include <GDIPlusConstants.au3>" & @CRLF & _
    @CRLF & _
    'Opt("GUIOnEventMode", 1)' & @CRLF & _
    @CRLF & _
    "Global $hWnd, $hGraphic, $hBitmap, $backbuffer" & @CRLF & _
    'Global $title = "GDI+ LiveEditor", _' & @CRLF & _
    " $width = 300, _ " & @CRLF & _
    " $height = 300" & @CRLF & _
    @CRLF & _
    "_Startup()" & @CRLF & _
    @CRLF

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

    $Code[1] = "While 1" & @CRLF & _
    " Sleep(100)" & @CRLF & _
    " _Update()" & @CRLF & _
    "WEnd" & @CRLF & _
    @CRLF

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

    $Code[2] = "Func _Startup()" & @CRLF & _
    " $hWnd = GUICreate($title, $width, $height, -1, -1)" & @CRLF & _
    ' GUISetOnEvent(-3, "_Shutdown")' & @CRLF & _
    " GUISetState()" & @CRLF & _
    @CRLF & _
    " _GDIPlus_Startup()" & @CRLF & _
    " $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)" & @CRLF & _
    " $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)" & @CRLF & _
    " $backbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)" & @CRLF & _
    "EndFunc" & @CRLF & _
    @CRLF

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

    $Code[3] = "Func _Shutdown()" & @CRLF & _
    " _GDIPlus_GraphicsDispose($backbuffer)" & @CRLF & _
    " _GDIPlus_BitmapDispose($hBitmap)" & @CRLF & _
    " _GDIPlus_GraphicsDispose($hGraphic)" & @CRLF & _
    " _GDIPlus_Shutdown()" & @CRLF & _
    " GUIDelete($hWnd)" & @CRLF & _
    " Exit" & @CRLF & _
    "EndFunc" & @CRLF & _
    @CRLF

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

    $Code[4] = "Func _Update()" & @CRLF & _
    " _GDIPlus_GraphicsClear($backbuffer, 0xFFFFFFFF)" & @CRLF
    For $i = 1 To $Line[0][0]
    $Code[4] &= @TAB & "_GDIPlus_GraphicsDrawLine($backbuffer, " & $Line[$i][0] & ", " & $Line[$i][1] & ", " & $Line[$i][2] & ", " & $Line[$i][3] & ")" & @CRLF
    Next
    For $i = 1 To $Elli[0][0]
    $Code[4] &= @TAB & "_GDIPlus_GraphicsDrawEllipse($backbuffer, " & $Elli[$i][0] & ", " & $Elli[$i][1] & ", " & $Elli[$i][2] - $Elli[$i][0] & ", " & $Elli[$i][3] - $Elli[$i][1] & ")" & @CRLF
    Next
    For $i = 1 To $Rect[0][0]
    $Code[4] &= @TAB & "_GDIPlus_GraphicsDrawRect($backbuffer, " & $Rect[$i][0] & ", " & $Rect[$i][1] & ", " & $Rect[$i][2] - $Rect[$i][0] & ", " & $Rect[$i][3] - $Rect[$i][1] & ")" & @CRLF
    Next
    $Code[4] &= " _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $width, $height)" & @CRLF & _
    "EndFunc" & @CRLF

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

    GUICtrlSetData($CodeGUI[1], $Code[0] & $Code[1] & $Code[2] & $Code[3] & $Code[4] & $Code[5] & $Code[6] & $Code[7] & $Code[8] & $Code[9])
    EndFunc ;==>_UpdateCode

    [/autoit]
    Updates

    v0.11.01 Fadenkreuz und Maussteuerung hinzugefügt, sowie kleinere Fehler beseitigt.
    v0.12.01 Neue Formen hinzugefügt
    v0.13.01 In alle Richtungen zeichnen hinzugefügt

    ToDo
    • Farbauswahl
    • Alle Standardformen
    • Fadenkreuz-Bug beheben
    • Löschen
    • Verschieben


    Verbesserungsvorschläge und konstruktive Kritik sind natürlich gerne gesehen. ;)

    MfG,
    H2112.

  • #Update. Siehe 1. Post

    :!: v0.10.01 - v0.11.01 Changelog
    • Maussteuerung hinzugefügt
    • Fadenkreuz hinzugefügt
    • Kleinere Fehler beseitigt

    #Update. Siehe 1. Post

    :!: v0.11.01 - v0.12.01 Changelog
    • Neue Formen
    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

    Einmal editiert, zuletzt von H2112 (26. Oktober 2010 um 23:29)

  • Wow nice.
    Das ist dir gut gelungen.
    Es erspart einem wirklich eine Menge schreibarbeit xD
    Farbunterstützung wäre aber ganz nett.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • moin moin,

    wenn du das mit dem quadratzeichnen so schreibst:

    [autoit]

    If Not $Rect[0][0] = 0 Then
    For $i = 1 To $Rect[0][0]
    if $Rect[$i][0] < $Rect[$i][2] and $Rect[$i][1] < $Rect[$i][3] then _GDIPlus_GraphicsDrawRect($MainGUI[3], $Rect[$i][0], $Rect[$i][1], $Rect[$i][2] - $Rect[$i][0], $Rect[$i][3] - $Rect[$i][1])
    if $Rect[$i][0] < $Rect[$i][2] and $Rect[$i][1] > $Rect[$i][3] then _GDIPlus_GraphicsDrawRect($MainGUI[3], $Rect[$i][0], $Rect[$i][3], $Rect[$i][2] - $Rect[$i][0], $Rect[$i][1] - $Rect[$i][3])
    if $Rect[$i][0] > $Rect[$i][2] and $Rect[$i][1] < $Rect[$i][3] then _GDIPlus_GraphicsDrawRect($MainGUI[3], $Rect[$i][2], $Rect[$i][1], $Rect[$i][0] - $Rect[$i][2], $Rect[$i][3] - $Rect[$i][1])
    if $Rect[$i][0] > $Rect[$i][2] and $Rect[$i][1] > $Rect[$i][3] then _GDIPlus_GraphicsDrawRect($MainGUI[3], $Rect[$i][2], $Rect[$i][3], $Rect[$i][0] - $Rect[$i][2], $Rect[$i][1] - $Rect[$i][3])
    Next
    EndIf

    [/autoit]

    dann geht es wie bei der ellipse auch in alle himmelsrichtungen.
    zusätzlich könnte man noch jeweils gefüllte rechtecke und ellipsen addieren

    und auch freihandzeichnen.

  • Also ich denke, es wäre cool, wenn du die Möglichkeit geben würdest, Bilder und Text einzufügen.

    Ich stelle mir das im Endeffekt so vor, dass man nacher in einer kleinen Box alle Elemente hat, für die man dann auch Einstellungen vornehmen kann. Bei einem "Textobjekt" zum Beispiel kann man dann auch im Nachhinein Text oder Schriftart ändern. Oder man kann verschiedene Events mit vorgefertigten Funktionen belegen (zum Beispiel sich ändernde Transparenz bei einem Mousehover über ein Icon). Außerdem wäre es cool, wenn man dann eine "Eventhandler" Funktion hätte, wo man selbst nochmal zusätzlich bestimmen könnte, was beispielsweise bei einem Links- oder Rechtsklick passieren soll.

    Dann wäre das nämlich wirklich interessant, um richtige GUI's zu machen.

  • Also ich denke, es wäre cool, wenn du die Möglichkeit geben würdest, Bilder und Text einzufügen.

    Ich stelle mir das im Endeffekt so vor, dass man nacher in einer kleinen Box alle Elemente hat, für die man dann auch Einstellungen vornehmen kann. Bei einem "Textobjekt" zum Beispiel kann man dann auch im Nachhinein Text oder Schriftart ändern. Oder man kann verschiedene Events mit vorgefertigten Funktionen belegen (zum Beispiel sich ändernde Transparenz bei einem Mousehover über ein Icon). Außerdem wäre es cool, wenn man dann eine "Eventhandler" Funktion hätte, wo man selbst nochmal zusätzlich bestimmen könnte, was beispielsweise bei einem Links- oder Rechtsklick passieren soll.

    Dann wäre das nämlich wirklich interessant, um richtige GUI's zu machen.

    hört sich in etwa hiernach an:
    [Blockierte Grafik: http://img5.imagebanana.com/img/jy76d6fm/l23ii465.jpg]

    :D

  • Schönes programm, nur solltest du es noch o machen das es overlapped ist , da es momentan nicht möglich ist, auch das entfernen von objekten sollte noch eingefügt werden

  • Interessante Idee,
    wird ja anscheinend so eine Art Koda für Gdi+. :)
    Was ich nicht so gut finde ist, dass wenn man ein Objekt ausgewählt hat
    und dieses plazieren möchte, der Cursor verschwindet wenn man in den Zeichen-Gui geht,
    und man so nicht weiß wo angesetzt wird.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • ich würde dir vorschlagen noch eine lösch bzw Verschiebe Funktion ein zu bauen;D

    Hast ja jetzt schon viele verbesserungs vorschläage^^

  • Verbesserungsvorschlag:
    -an der Seite eine Liste welche Objekte erstellt werden Object(x, y, color, objektbezogen n) beispiel: Linie(0, 5, 0x00FF00, 100) oder Quadrat(0, 100, 0xFF0000, 50, 60)
    -Größe der Objekte im nachhinein veränderbar
    -Größe des "Malfensters" veränderbar
    -Eigenschaften für Objekte einstellbar wie z.B. Verlaufsfüllung für Quadrade oder Dreiecke

    Hmmmm, ich schreib hier einfach mal blaaaaaaa weil ich nicht weiß was ich sonst schreiben könnte.
    blaaaaaaaaaaaaa.

  • #Update. Siehe 1. Post

    :!: v0.12.01 - v0.13.01 Changelog
    • In alle Richtungen zeichnen hinzugefügt


    ToDo-Liste angelegt
    Beispiel hinzugefügt

    Danke für das umfangreiche Feedback. ;)

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%