GUI Probleme ...

  • hallo und zwar folgender Programmcode:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $gui = GUICreate("bullz ftw", 200, 100)
    GUICtrlCreateLabel("Bullzhilfeprogramm", 30, 10)
    $okbutton = GUICtrlCreateButton("Start", 70, 50, 60)
    winsetontop($gui,"",1)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $okbutton
    while 1

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

    $coord = PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xE5B56A, 0 )

    If Not @error Then
    MsgBox(0, "Die Koordinaten X und Y lauten:", $coord[0] & "," & $coord[1])

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

    EndIf
    sleep(2000)
    WEnd

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

    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd

    [/autoit]


    Habe mich bisher nie mit GUIs beschäftigt und es geht hier nur um wie ich meine GUI das tut was ich will. Nicht darum was macht Programm code x in meiner GUI. 2 Probleme habe ich.

    1.) Drücke ich nach Programmstart direkt auf das X ( $GUI_EVENT_CLOSE ) zum Beenden der GUI wird die GUI richtig beendet. Drücke ich aber einmal auf den $okbutton und dann auf das X bleibt die GUI offen und es passiert nix. Warum auch immer... anscheinend hängt er irgendwie drin.

    2.) Der Button Start soll sich nach einem Klick auf " Stop " umbennen und gleichzeitig soll auch die Mahlwerk dahinter stoppen. Ganz einfacher Aus und Einschalter.

  • Hallo, versuch mal so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $gui = GUICreate("bullz ftw", 200, 100)
    GUICtrlCreateLabel("Bullzhilfeprogramm", 30, 10)
    $okbutton = GUICtrlCreateButton("Start", 70, 50, 60)
    winsetontop($gui,"",1)
    GUISetState(@SW_SHOW)

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

    While 1

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $okbutton
    If GUICtrlRead($okbutton) = "Start" Then
    AdlibRegister("_PixelSearch", 2000)
    GUICtrlSetData($okbutton, "Stop")
    Else
    AdlibUnRegister("_PixelSearch")
    GUICtrlSetData($okbutton, "Start")
    EndIf
    EndSwitch
    WEnd

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

    Func _PixelSearch()
    $coord = PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xE5B56A, 0 )
    If Not @error Then MsgBox(0, "Die Koordinaten X und Y lauten:", $coord[0] & "," & $coord[1])
    EndFunc

    [/autoit]

    Das Problem bei dir halt war, dass du nicht aus der Endlosschleife rauskamst.

  • Ich würde das ja so machen ;) :

    [autoit]

    Func _PixelSearch()
    $coord = PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xE5B56A, 0 )
    If Not @error Then
    MsgBox(0, "Die Koordinaten X und Y lauten:", $coord[0] & "," & $coord[1])
    AdlibUnRegister()
    EndIf
    EndFunc

    [/autoit]
  • Achja hat ich vergessen, muss er natürlich wenn er was gefunden hat und auch GUICtrlSetData($okbutton, "Start").

  • huhu vielen dank ;) läuft alles soweit. Was mir bisi Kopfweh bereit ist das ich " nicht normal wie gewohnt " arbeiten kann, weil ich sonst irgendwie wieder hänge. Hätte gern das er meine FUNC alle 3 Sekunden lang ausführt wird wenn ich auf Start geklickt habe,. solange ich nicht auf STOP drücke. Baue ich wie gewohnt eine

    While 1
    func
    Wend

    Schleife ein hängt das ganze Zeugs wieder... GUI doch nicht so einfach wie ich dachte :(


    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $gui = GUICreate("bullz ftw", 200, 100)
    GUICtrlCreateLabel("Bullzhilfeprogramm", 30, 10)
    $okbutton = GUICtrlCreateButton("Start", 70, 50, 60)
    winsetontop($gui,"",1)
    GUISetState(@SW_SHOW)

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

    While 1

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $okbutton
    If GUICtrlRead($okbutton) = "Start" Then
    AdlibRegister("_PixelSearch", 2000)
    GUICtrlSetData($okbutton, "Stop")
    Else
    AdlibUnRegister("_PixelSearch")
    GUICtrlSetData($okbutton, "Start")
    EndIf
    EndSwitch
    WEnd

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

    Func _PixelSearch()
    $coord = PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xE5B56A, 0 )
    If Not @error Then
    MsgBox(0, "Die Koordinaten X und Y lauten:", $coord[0] & "," & $coord[1])
    AdlibUnRegister()
    EndIf
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Wenn du die Funktion alle 3 Sekunden ausführen willst, mußt du nur die Zeit in AdlibRegister ändern. Ausserdem das AdlibUnregister aus der Funktion entfernen,sonst wird die Funktion nur 1 mal gestartet.

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $gui = GUICreate("bullz ftw", 200, 100)
    GUICtrlCreateLabel("Bullzhilfeprogramm", 30, 10)
    $okbutton = GUICtrlCreateButton("Start", 70, 50, 60)
    winsetontop($gui,"",1)
    GUISetState(@SW_SHOW)

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

    While 1

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $okbutton
    If GUICtrlRead($okbutton) = "Start" Then
    AdlibRegister("_PixelSearch", 3000); 3000 ms = 3 Sekunden
    GUICtrlSetData($okbutton, "Stop")
    Else
    AdlibUnRegister("_PixelSearch")
    GUICtrlSetData($okbutton, "Start")
    EndIf
    EndSwitch
    WEnd

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

    Func _PixelSearch()
    $coord = PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xE5B56A, 0 )
    If Not @error Then
    MsgBox(0, "Die Koordinaten X und Y lauten:", $coord[0] & "," & $coord[1])
    EndIf
    EndFunc

    [/autoit]
  • Also ich würde es trotzdem so schreiben

    [autoit]

    Func _PixelSearch()
    $coord = PixelSearch( 0, 0, @DesktopWidth, @DesktopHeight, 0xE5B56A, 0 )
    If Not @error Then
    MsgBox(0, "Die Koordinaten X und Y lauten:", $coord[0] & "," & $coord[1])
    AdlibUnRegister("_PixelSearch")
    GUICtrlSetData($okbutton, "Start")
    EndIf
    EndFunc

    [/autoit]


    Er klickt ja auf Start und dann wird die Funktion alle 3 Sekunden ausgeführt, bis er dann bei den angegeben Pixeln den Farbwert findet, dann hat er ja was gefunden. Dann kann auch das Adlib beendet werden. Und er kann wieder auf Start klicken.

  • juhu danke für die Tipps ;) habe es jetzt soweit zufriedenstellend bis auf eine Kleinigkeit.

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $gui = GUICreate("bullz ftw", 200, 100)
    GUICtrlCreateLabel("Bullzhilfeprogramm", 30, 10)
    $okbutton = GUICtrlCreateButton("Start", 70, 50, 60)
    winsetontop($gui,"",1)
    GUISetState(@SW_SHOW)

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

    While 1

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $okbutton
    If GUICtrlRead($okbutton) = "Start" Then
    AdlibRegister("_PixelSearch", 7000); 7000 ms = 7 Sekunden
    GUICtrlSetData($okbutton, "Stop")
    Else
    AdlibUnRegister("_PixelSearch")
    GUICtrlSetData($okbutton, "Start")
    EndIf
    EndSwitch
    WEnd

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

    Func _PixelSearch()
    $coord = PixelSearch( @DesktopWidth/2.5, @DesktopHeight/2.77, @DesktopWidth/2.1, @DesktopHeight/2.37, 0x640204, 0 )
    If Not @error Then
    sleep(500)
    ;MsgBox(0, "Die Koordinaten X und Y lauten:", $coord[0] & "," & $coord[1])
    mouseclick("right",$coord[0],$coord[1],2,1)
    beep(400,2000)
    ;~ AdlibUnRegister("_PixelSearch")
    ;~ GUICtrlSetData($okbutton, "Start")
    EndIf
    EndFunc

    [/autoit]

    Er soll solange im 7 Sek intervall in die Funktion springen solange ich Stop mache. Das funktioniert ja, aber er drückt mir die mouseclick nur 1 mal... und bleibt dann an dieser Position ohne Mouseclicks stehen.... nur wenn ich die Mouse wegbewege führt er sie wieder hin mit mouseclicks ... komisch .... anscheinend ist er zu faul zum clicken wenn er schon an der Kordinate ist ... meine Holzhammerwhile schleife würde ja wieder helfen aber eh wissen... dann steckt das Drecks teil wieder...

    edit: Soda 3 Stunden dran gesessen, nix hinbekommen außer das sich autoit script aufhängt ;) plz help

    2 Mal editiert, zuletzt von Bullz (24. März 2010 um 14:10)