Schleife stoppen

  • Hallo Freunde der automatisierten Schritte,

    hat ein Button-Click nicht Vorrang vor einer Schleife? Wie kann ich durch einen Button-Click den Inhalt einer Variablen so verändern, dass dieser von einer laufenden Schleife wahrgenommen wird?

    Die Idee:

    Ich starte mit Button 1 die Schleife. Solange $i = 0 ist, soll die Schleife laufen. Mit Button 2 will ich die Schleife stoppen, indem ich $i auf 1 setze. Damit müsste beim nächsten Schleifendurchlauf die Schleife stoppen, da $i = 1 ist (until $i = 1). Wie die Ausgabe in der Console zeigt, wird der Mausklick auf "Stop" und "Ende" gar nicht ausgewertet. Warum nicht?

    Spoiler anzeigen


    Quellcode
    Quellcode bearbeiten
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ###
    Local $Form2 = GUICreate("Schleife", 299, 56, 1184, 328)
    Local $Weiter = GUICtrlCreateButton("&Weiter", 8, 8, 89, 41)
    GUICtrlSetFont(-1, 11, 400, 0, "Verdana")
    Local $Button_Stop = GUICtrlCreateButton("&Stop", 104, 8, 89, 41)
    GUICtrlSetFont(-1, 11, 400, 0, "Verdana")
    Local $Button_Ende = GUICtrlCreateButton("&Ende", 200, 8, 89, 41)
    GUICtrlSetFont(-1, 11, 400, 0, "Verdana")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###



    Global $i = 0 ; für die Schleife (??? wann setze ich in einem Script die Variable auf Local bzw. Global ???)
    Local $pause = 1000 ; Dauer für die Pause

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $Weiter
    $i = 0 ; Schleife läuft, solange $i = 0 ist
    Do
    ConsoleWrite ($i & @TAB & @msec & @CRLF)
    sleep ($pause) ; kurze Pause
    Until $i = 1 ; Schleife so lange durchlaufen, bis $i = 1 ist

    Case $Button_Stop
    $i = 1 ; stopt die Schleife

    Case $Button_Ende ; Ende
    Exit
    EndSwitch
    WEnd


    Viele Grüße
    AutoMit

    • Offizieller Beitrag

    hat ein Button-Click nicht Vorrang vor einer Schleife?

    Nein, wie kommst du da drauf?
    Wenn du deine Schleife gestartet hast, wird doch die äußere Schleife, die GuiGetMessage abfragt niemals wieder durchlaufen. Somit kann kein Button-Klick wahrgenommen werden.
    Du kannst alternativ im OnEvent-Mode arbeiten. Schau dir mal AutoItSetOption an. Baue dein Skript um zum OnEvent-Mode und schaue was passiert.

  • Meintest Du das? ...Füge ich als Zeile vor der Schleife:

    GUIOnEventMode Aktiviert/Deaktiviert die OnEvent Funktionsanmeldung.
    0 = (Standard) deaktiviert.
    1 = aktiviert.


    Opt("GUIOnEventMode", 1) ; AutoItSetOption - 0=ausgeschaltet, 1=OnEvent Modus aktiviert

    kann ich auf alle Button klicken, ohne dass eine Reaktion folgt. Die Schleife wird noch nicht einmal gestartet.

    Wie wäre die Schleifenkonstruktion in meinem Beispiel denn richtig, so dass ich die Schleife per Button-Click stoppen kann?
    (ohne, dass ich die Standardeinstellung GUIOnEventMode ändere ... wobei es interessant wäre, zu sehen, wie das Grundgerüst für beide Schleifenvarianten aussehen würde)

  • Ich habe gerade weitere Beiträge zu Start / Stop hier gefunden - lese mich da en.

    Hatte nach Schleife im Titel gesucht ;) ... ja, das richtige Suchwort.