Guten Morgen zusammen
ich möchte gerne eine For Next Schleife durch klicken auf den Exit Button in meinem Formular beenden. Das Problem welches ich habe ist dass ich in der Schleife den Befehl Sleep(4000) benötige und dadurch die Schleife nicht beendet wird wenn ich auf den Exit Button klicke.
For $i = 1 to 100
If $msg = $btn_exit then Exitloop
Befehl 1
Befehl 2
Sleep(4000)
Next
For Next Schleife beenden durch Klick auf Exit Button
-
- [ gelöst ]
-
johny1099 -
5. Januar 2010 um 09:07 -
Geschlossen -
Erledigt
-
-
Hi,
vielleicht so:
[autoit]$bexit = False
[/autoit]
For $i = 1 to 100
Befehl 1
Befehl 2
$start = Timerinit ()
While TimerDiff ($start) < 4000
Sleep(1)
If $msg = $btn_exit then
$bexit = True
ExitLoop
EndIf
WEnd
If $bexit Then ExitLoop
Next;-))
Stefan -
Vielen Dank für die Hilfe. Es funkioniert korrekt.
-
Hi,
Code Verbesserung, nachdem ich gelernt habe, dass Exitloop mit Level arbeitet (Sprenger120 gilt der Dank):
[autoit]For $i = 1 to 100
[/autoit]
Befehl 1
Befehl 2
$start = Timerinit ()
While TimerDiff ($start) < 4000
Sleep(1)
If $msg = $btn_exit then ExitLoop 2
WEnd
Next;-))
Stefan -
Hi...
gibts auch etwas ähnliches für den OnEvent Modus?
Ich würde nämlich auch sehr gerne, mit einem Button-Click, aus einer Schleife ausbrechen.Nur habe ich keine Ahnung, mit was ich "$msg" ersetzen muss.
Ich habs schon damit versucht:
[autoit]
[/autoit]
If GUIGetMsg = $GUI_EVENT_CLOSE Then
CLOSE()
...Das Script stürzt dann aber mit dieser Meldung ab:
-
Hallo manta,
schau dir Tiny URL Downloader v0.95.5 Build 2011-01-06 von UEZ an, dass ist ein gutes Beispiel wie man im OnEvent-Modus soetwas realisert, Durch Adlib wird die Schleife komplett vermieden.
Edit: Eine andere Lösung wäre allerdings am Anfang der Func den OnEvent-Modus zu verlassen und ihn später wieder herzstellen:
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("GuiOnEventMode", 1)Global $Button, $bStop
[/autoit] [autoit][/autoit] [autoit]_example() ;dieses Skript erfüllt seinen Zweck Unterschied in _count2 beachten
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _example()
[/autoit] [autoit][/autoit] [autoit]
$hGui = GUICreate("test", 200, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
$Button = GUICtrlCreateButton("&Start", 0, 20, 100, 20)
GUICtrlSetOnEvent(-1, "_count")
GUISetState()
$bStop = False
While 1
Sleep(10)
WEnd
EndFunc ;==>_example1Func _count()
[/autoit] [autoit][/autoit] [autoit]
$bRestoreOnEvent = Opt("GuiOnEventMode", 0)
If GUICtrlRead($Button) = "&Start" Then
GUICtrlSetData($Button, "&Stop")For $i = 1 To 1000
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($i & @CRLF)
if GUIGetMsg() = $Button Then ExitLoop
Sleep(10)
Next
Else
GUICtrlSetData($Button, "&Start")
EndIf
Opt("GuiOnEventMode", $bRestoreOnEvent)
EndFunc ;==>_countFunc _exit()
[/autoit]
Exit
EndFunc ;==>_exitDie nächste mir bekannte Möglichkeit ist in der Schleife mit
[autoit]_IsPressed
[/autoit]eine Taste abzfangen und daraufhin abzubrechen,
stayawayknight: du hast dir es ja sehr einfach gemacht,
mfg autoBert
-
kleines Beispiel:
[autoit]
[/autoit][autoit][/autoit][autoit]
Opt("GuiOnEventMode", 1)
;Guierstellung hier rein
GuiCtrlCreateButton("Button", 0, 20, 100, 20)
GuiCtrlSetOnEvent(-1, "set")
GuiSetState(@SW_SHOW)
$fBool = TrueWhile $fBool ;Solange $fBool = True ist
[/autoit][autoit][/autoit][autoit]
Sleep(10)
;Leerlauf
WEndFunc set()
[/autoit]
$fBool = False ;Damit ist $fBool nicht mehr True, die Schleife oben wird beendet. (dadurch in diesem Falle auch das Script)
EndFuncautoBert: Ja, ist ein einfaches Beispiel, aber ich hab die Fragestellung so verstanden: Klick auf Button -> Schleife beenden. Ich versteh auch nicht wirklich, wieso ihr den Msg-Loop Modus verwenden wollt.
-
autoBert
Ahhh... vielen Dank.
Das Script von UEZ ist echt spitze.Dann werde ich meine While-Schleife entfernen und durch AdlibRegister ersetzen.
stayawayknight
Danke fürs Beispiel.
Ich Schussel habe aber vergessen zu erwähnen, dass die Schleife mitten in einer Funktion sitzt.
Deshalb greift das anscheinend nicht.Aber mit AdlibRegister habe ich jetzt eine schöne Lösung.
Danke nochmal... und gn8
Edit:
[autoit]
Mit AdlibRegister läufts wunderbar.
Hier mal ein kleines Beispiel:
[/autoit][autoit][/autoit][autoit]
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)$GUI = GUICreate("Schleife", 130, 45)
[/autoit][autoit][/autoit][autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
$Start_DL = GUICtrlCreateButton("Start", 10, 10, 50)
GUICtrlSetOnEvent(-1, "Start")
$Stop_DL = GUICtrlCreateButton("Stop", 70, 10, 50)
GUICtrlSetOnEvent(-1, "Stop")GUISetState(@SW_SHOW)
[/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit]
Sleep(1000)
WEndFunc Start() ;~ für Einstellungen usw...
[/autoit][autoit][/autoit][autoit]
AdlibRegister("SCHLEIFE", 1000)
EndFuncFunc Stop()
[/autoit][autoit][/autoit][autoit]
ToolTip("")
AdlibUnRegister("SCHLEIFE")
EndFuncFunc SCHLEIFE() ;~ prüft bei mir z.B. andere Prozesse und gibt die Werte aus
[/autoit][autoit][/autoit][autoit]
ToolTip("AdlibRegister läuft...", 0, 0)
EndFuncFunc CLOSE()
[/autoit]
Exit
EndFunc