[GDi+] Die 4 magischen Quadrate

  • Da ich im Moment ja GDi+ am lernen bin (Dank Sprenger :P)
    Hab ich mal ein kleines Testscript gemacht.

    Man hat 4 rote Quadrate und wenn man auf eines klickt wird es Grün.
    Nochmaliges Klicken lässt es wieder Rot werden.

    Beenden mit ESCAPE (ESC)

    Script
    [autoit]


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

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

    _GDIPlus_Startup()

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

    HotKeySet("{ESC}", "_Exit")

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

    Global $hGui, $hGrafik, $hBrusch_Red, $hBrusch_Green
    Global $aRects[4][3] = [[50, 50, False],[250, 50, False],[50, 250, False],[250, 250, False]]
    Global $aHandle[4]

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

    $hGui = GUICreate("GDI+ Script von Blume", 400, 400)
    GUISetBkColor(0xFFFFFF)
    GUISetState()

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

    $hBrusch_Red = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $hBrusch_Green = _GDIPlus_BrushCreateSolid(0xFF00FF00)
    $hGrafik = _GDIPlus_GraphicsCreateFromHWND($hGui)

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

    For $iX = 0 To UBound($aRects) - 1
    $aHandle[$iX] = GUICtrlCreateLabel("", $aRects[$iX][0], $aRects[$iX][1], 100, 100)
    _GDIPlus_GraphicsFillRect($hGrafik, $aRects[$iX][0], $aRects[$iX][1], 100, 100, $hBrusch_Red)
    Next

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

    While True
    $aInfo = GUIGetCursorInfo($hGui)
    While _IsPressed("01")
    Sleep(10)
    WEnd
    For $iX = 0 To UBound($aRects) - 1
    If $aInfo[4] = $aHandle[$iX] And $aInfo[2] Then
    If $aRects[$iX][2] Then
    _GDIPlus_GraphicsFillRect($hGrafik, $aRects[$iX][0], $aRects[$iX][1], 100, 100, $hBrusch_Red)
    Else
    _GDIPlus_GraphicsFillRect($hGrafik, $aRects[$iX][0], $aRects[$iX][1], 100, 100, $hBrusch_Green)
    EndIf
    $aRects[$iX][2] = Not $aRects[$iX][2]
    EndIf
    Next
    Sleep(10)
    WEnd

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

    Func _Exit()
    _GDIPlus_BrushDispose($hBrusch_Red)
    _GDIPlus_BrushDispose($hBrusch_Green)
    _GDIPlus_GraphicsDispose($hGrafik)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    lg, Blume :)

  • Funktioniert, und ist für den Anfang recht gut ;).
    Als Übung könntest du das Script ja jetzt noch verbessern und währendessen dazulernen. Als Vorschlag hätte ich mal einen Backbuffer einzubauen, das ganze mid AdlibRegister oder einer anderen Timer Funktion zu machen anstatt mit Sleep in einer Endlosschleife etc... :D

  • Funktioniert :D Vllt kannst du die GUI noch schließen lassen durch GUIGetMsg() oder OnEventMode ;)

  • Zitat

    Funktioniert :D Vllt kannst du die GUI noch schließen lassen durch GUIGetMsg() oder OnEventMode ;)


    Ich glaub Blume weiß wie das geht :whistling: .....
    Aber eine andere Schließmöglichkeit als Esc. wäre schon nützlich ;). Wenn du es mit AdlibRegister machst, kannst du das Sleep aus der Hauptschleife entfernen und durch eine ganz normale MessageLoop ersetzen.

  • So, da du anscheinend den GUIOnEventMode nicht so ganz kennst, hier mal das Script mit einer EXIT function über ESC & das rote X ;)

    Spoiler anzeigen
    [autoit]


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

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

    _GDIPlus_Startup()

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

    Opt("GUIOnEventMode", 1)

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

    Global $hGui, $hGrafik, $hBrusch_Red, $hBrusch_Green
    Global $aRects[4][3] = [[50, 50, False],[250, 50, False],[50, 250, False],[250, 250, False]]
    Global $aHandle[4]

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

    $hGui = GUICreate("GDI+ Script von Blume", 400, 400)
    GUISetOnEvent(-3, "_Exit")
    GUISetBkColor(0xFFFFFF)
    GUISetState()

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

    $hBrusch_Red = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $hBrusch_Green = _GDIPlus_BrushCreateSolid(0xFF00FF00)
    $hGrafik = _GDIPlus_GraphicsCreateFromHWND($hGui)

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

    For $iX = 0 To UBound($aRects) - 1
    $aHandle[$iX] = GUICtrlCreateLabel("", $aRects[$iX][0], $aRects[$iX][1], 100, 100)
    _GDIPlus_GraphicsFillRect($hGrafik, $aRects[$iX][0], $aRects[$iX][1], 100, 100, $hBrusch_Red)
    Next

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

    While True
    $aInfo = GUIGetCursorInfo($hGui)
    While _IsPressed("01")
    Sleep(10)
    WEnd
    For $iX = 0 To UBound($aRects) - 1
    If $aInfo[4] = $aHandle[$iX] And $aInfo[2] Then
    If $aRects[$iX][2] Then
    _GDIPlus_GraphicsFillRect($hGrafik, $aRects[$iX][0], $aRects[$iX][1], 100, 100, $hBrusch_Red)
    Else
    _GDIPlus_GraphicsFillRect($hGrafik, $aRects[$iX][0], $aRects[$iX][1], 100, 100, $hBrusch_Green)
    EndIf
    $aRects[$iX][2] = Not $aRects[$iX][2]
    EndIf
    Next
    Sleep(10)
    WEnd

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

    Func _Exit()
    _GDIPlus_BrushDispose($hBrusch_Red)
    _GDIPlus_BrushDispose($hBrusch_Green)
    _GDIPlus_GraphicsDispose($hGrafik)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    Have a nice Day and nice Holidays with GDI+ :rock:

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Hoffentlich darf ich das....
    Blume hier dein Skript. :P Etwas aufgemotzt^^

    Oh Mist. ich machs wieder raus^^
    mach erstmal dien Eigenes zu Lernzwecken fertig. danach können wir es immernoch vergleichen :P

    Spoiler anzeigen
    [autoit]

    Erstmal weg gemacht. Wenn Blume seins fertig hat kommts wieder hin :P

    [/autoit]

    mfg
    Mars(i)