GUI Start/Stop Button

  • Hey,

    der Stopbutton lässt sich leider nicht betätigen wenn ich eine Do Until Schleife aufrufe.

    Ich bin mittlerweile schon so verwirrt, ich versteh nichts mehr -.-.

    Folgender Code:

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $stop = False
    GUICreate("Test", 400, 250)
    $tab = GUICtrlCreateTab(0, 0, 403, 253)
    GUICtrlCreateTabItem("Excel ausfüllen")
    Opt("GUIOnEventMode", 1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    $start = GUICtrlCreateButton("Start", 50, 110, 80, 30)
    $stop = GUICtrlCreateButton("Stop", 290, 110, 80, 30)
    GUICtrlSetOnEvent($start, "_startbutton")
    GUICtrlSetOnEvent($stop, "_stoppbutton")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(1000)
    $stop = False
    WEnd

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

    Func _startbutton()
    AdlibRegister("_eintragen")
    EndFunc

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

    Func _eintragen()
    $entrys = 1
    Do
    Sleep(1000)
    toolTip("Tabellen ausgefüllt: "&$entrys,868, 723)
    $entrys = $entrys + 1
    Until $entrys = 125
    EndFunc

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

    Func _stoppbutton()
    AdlibUnRegister("_eintragen")
    EndFunc

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

    Func close()
    Exit
    EndFunc

    [/autoit]

    Jemand eine Idee?

    Wenn möglich so simple wie es geht.

    Wäre echt dankbar.

    MfG

    Einmal editiert, zuletzt von Desaster (17. Dezember 2011 um 18:52)

  • naja also wenn ich in die funktion des stopp buttons eine msgbox mache kommt diese auch wenn ich auf stop drücke(während er in der schleife ist)

  • Hey,

    ja, aber das ist nicht die Aufgabe.

    Ich muss irgendwie auf der Schleife rauskommen bzw. beenden.

  • Hi,
    der Stop Button funktioniert, aber dein Problem kommt von der mit der Adlib-Funktion aufgerufenen Funktion. Die läuft noch weiter, bis die 125 erreicht wurde. Du solltest einfach eine Globale Variable definieren, die du als Flag benutzt und in der Schleife abfragst. Setze sie z.B. beim Start-Button auf 1 und beim Stop-Button auf 0 und prüfe sie in deiner DO/UNTIL-Schleife in der Funktion _eintragen.


    [autoit]

    #include #include Global $stop = FalseGUICreate("Test", 400, 250)$tab = GUICtrlCreateTab(0, 0, 403, 253)GUICtrlCreateTabItem("Excel ausfüllen")Opt("GUIOnEventMode", 1)GUISetOnEvent($GUI_EVENT_CLOSE, "close")$start = GUICtrlCreateButton("Start", 50, 110, 80, 30)$stop = GUICtrlCreateButton("Stop", 290, 110, 80, 30)GUICtrlSetOnEvent($start, "_startbutton")GUICtrlSetOnEvent($stop, "_stoppbutton")
    GUISetState(@SW_SHOW)
    global $flag=0

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

    While 1 Sleep(1000) $stop = FalseWEnd
    Func _startbutton() $flag=1 AdlibRegister("_eintragen")EndFunc
    Func _eintragen() $entrys = 1Do if $flag=0 then ExitLoop Sleep(1000) toolTip("Tabellen ausgefüllt: "&$entrys,868, 723)$entrys = $entrys + 1Until $entrys = 125EndFunc
    Func _stoppbutton() $flag=0 AdlibUnRegister("_eintragen")EndFunc
    Func close() ExitEndFunc

    [/autoit]