while schleife stoppen

06/01/2013 00:00 gametom50#1
hey :D,

ich wollte mal fragen wie ich eine while schleife per button stoppe und sie dann wieder mit dem start button aktivieren kann ;).

LG Tom
06/01/2013 00:01 leledergeile#2
func ?
06/01/2013 00:07 gametom50#3
Func startspam()
while (1)
ControlSend ( "METIN2", "", "", "{ENTER}" )
ControlSend ( "METIN2", "", "", GUICtrlRead ( $Spam ) )
ControlSend ( "METIN2", "", "", "{ENTER}" )
ControlSend ( "METIN2", "", "", "{ENTER}" )
Sleep ( guictrlread( $millisek ))
WEnd
EndFunc

Func beenden1()
While (1)
Sleep (1)
WEnd
EndFunc
06/01/2013 01:20 qkuh#4
Mit einer globalen Variable, die dann als Bedingung in der while-Schleife angegeben wird. Beim Button-Klick wird diese dann dementsprechend geändert.
06/01/2013 01:39 gametom50#5
wärst du so nett und gibst mir dazu ein beispiel? am besten an meinem script? ^^
06/01/2013 01:54 Achat#6
Code:
case $Button
startspam()
;...

While not GuiGetMsg() = $ButtonStop
MfG
06/02/2013 19:41 gametom50#7
funktioniert bei mir leider nicht :/
ich versteh nicht wie ich das anwenden soll, aber wenn ich "case $Button
startspam()
;...

While not GuiGetMsg() = $ButtonStop"

einfach so einfüge funktionierts auf jedenfall nicht.. ._.
06/02/2013 22:40 YatoDev#8
Koenntest du vielleicht einfach mal googeln und die autoit hilfe benutzen ? und hoer verdammt nochmal auf hier neue threads zu oeffnen das kommt in den autoit talk !!

noob code (bin nur am handy)
While 1
if $wend = 1 then
;deine funcs
else
exitloop
endif
endwhile

wie du jetzt die variable zu etwas anderem als 1 abaenderst musst du selbst wissen ^^
Damit auch du das hinbekommst :
in einer standard koda gui sieht das so aus :
while $gui
case $button1
.....

genau so musst du das auch aufbauen
06/02/2013 23:24 lolkop#9
Quote:
Originally Posted by gametom50 View Post
funktioniert bei mir leider nicht :/
ich versteh nicht wie ich das anwenden soll, aber wenn ich "case $Button
startspam()
;...

While not GuiGetMsg() = $ButtonStop"

einfach so einfüge funktionierts auf jedenfall nicht.. ._.
du definierst dir eine zustands variable. diese kann nur wahr oder falsch als werte annehmen. ist die variable wahr, so soll deine aktion ausgeführt werden. ist sie hingegen falsch, so wird nichts ausgeführt.

bei buttondruck änderst du einfach nur den inhalt der variable... da die variable nur True oder False sein kann, und Not True = False und Not False = True ergeben, kannst du einfach mit $variable = Not $variable den zustand auf jeweils das gegenteil ändern...

ein kleiner beispielcode zu dem ganzen:
Code:
Dim $state, $gui=GUICreate('GUI', 140, 40, Default, Default, 0x10C80000)
$controlChangeStateButton = GUICtrlCreateButton('Change State', 10, 10, 120, 20)

While True
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $controlChangeStateButton
			$state = Not $state
	EndSwitch
	If $state Then
		;deine state aktion
	EndIf
WEnd
wie du siehst, haben wir unsere normale endlosschleife, in der in jedem durchlauf geschaut wird, ob ein button betätigt wurde. sobald dies geschehen ist, checken wir noch die state variable. ist diese aktiv, so führen wir die gewünschte aktion ebenfalls aus...

erweitern wir dieses einfache prinziep ein wenig, können wir mit minimalen änderungen am script das ganze auch recht hübsch grafisch anzeigen lassen:
Code:
Dim $state[3][2]=[['OFF','ON'],[0xFF0000,0xFF00]]
GUICreate('GUI', 200, 40, Default, Default, 0x10C80000)
$controlChangeStateButton = GUICtrlCreateButton('Change State', 10, 10, 80, 20)
$controlStateLabel = GUICtrlCreateLabel($state[0][0], 100, 10, 80, 20, 0x1201)
GUICtrlSetBkColor(-1, $state[1][0])

While True
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $controlChangeStateButton
			$state[2][0] = Not $state[2][0]
			GUICtrlSetBkColor($controlStateLabel, $state[1][$state[2][0]])
			GUICtrlSetData($controlStateLabel, $state[0][$state[2][0]])
	EndSwitch
	Switch $state[2][0]
		Case True
			ConsoleWrite('State = ON!'&@CRLF)
		Case False
			ConsoleWrite('State = OFF!'&@CRLF)
	EndSwitch
WEnd
06/03/2013 21:43 gametom50#10
Vielen Dank für deine sehr hilfreiche Antwort lolkop :).
BTW: Tschuldige für meine etlichen Themeneröffnungen FlutterShy ;), das Prinzip wo ich was reinposten soll und was jetzt angemessen für diese Abteilung ist habe ich aber noch nicht verstanden :P.

LG Tom
06/04/2013 18:19 YatoDev#11
Quote:
Originally Posted by gametom50 View Post
Vielen Dank für deine sehr hilfreiche Antwort lolkop :).
BTW: Tschuldige für meine etlichen Themeneröffnungen FlutterShy ;), das Prinzip wo ich was reinposten soll und was jetzt angemessen für diese Abteilung ist habe ich aber noch nicht verstanden :P.

LG Tom
Ich wollte dich nicht irgendwie anmeckern nur du eröffnest hier immer threads :)

Es gibt ein einfaches Prinzip wo man was reinpostet :
Kleine fragen / nicht so schwere codes : Autoit talk

Nur du verstehst glaube ich andere sachen als schwer weil das hier ist vormich autoit grundlagen und somit finde ich das gehört in den autoit talk .
Deswegen habe ich mir auch nicht die mühe gemacht dir einen code schnipsel zu geben um das schön zu lösen ^^
06/04/2013 19:24 gametom50#12
Achso nagut, dann wäre ja jetzt alles geklärt ^^, danke für den Hinweis :), jetzt hab ich das auch mal gecheckt :D.