While schleife lässt sich in der gui nicht unterbrechen.

07/06/2010 14:15 WiiZocker#1
So wie ich mir schon dachte muss ich wieder eine Frage stellen, ich hoffe es antwortet mir noch wer ^^

Ich habe alles soweit fertig, doch jetzt möchte ich eine Pause funktion einbauen, da ich aber noch eine while schleife brauchte, sind alle felder während die Zeit abläuft deaktiviert.

Jetzt zu der frage, wie kann ich die schleife "Stopen" ohne Hotkey also ich möchte das wenn man auf nen Button klickt, sich die schleife unterbricht.

Ich poste hier mal den gesammten code:

Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>




;Das Hauptfenster
#Region ### START Koda GUI section ### Form=c:\users\jan\desktop\autoit\shutdown timer\shutdown hauptfenster.kxf
$Hauptfenster = GUICreate("Shutdown By Jan25051", 269, 214, 337, 426)
$Start = GUICtrlCreateButton("Start", 80, 144, 187, 65, 0)
$Stop = GUICtrlCreateButton("Stop", 0, 144, 83, 41, 0)
$StopPasswort = GUICtrlCreateInput("Passwort", 0, 184, 81, 21) ;Das passwort muss ich ändern.
$StundenSchrift = GUICtrlCreateLabel("Stunden", 16, 80, 64, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Reference Sans Serif")
$Stunden = GUICtrlCreateLabel("00", 32, 104, 26, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Reference Sans Serif")
$MinutenSchrift = GUICtrlCreateLabel("Minuten", 96, 80, 62, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Reference Sans Serif")
$SekundenSchrift = GUICtrlCreateLabel("Sekunden", 176, 80, 75, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Reference Sans Serif")
$Minuten = GUICtrlCreateLabel("00", 112, 104, 26, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Reference Sans Serif")
$Sekunden = GUICtrlCreateLabel("00", 200, 104, 26, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Reference Sans Serif")
$ZeitButton = GUICtrlCreateButton("Zeit Ändern", 16, 16, 235, 41, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###






;Das Nebenfenster "Zeit Ändern"
#Region ### START Koda GUI section ### Form=C:\Users\Jan\Desktop\AutoIt\Shutdown Timer\Zeit Ändern Nebenfenster.kxf
$Zeitfenster = GUICreate("Zeit Ändern", 316, 124, 354, 237)
$StdPlus = GUICtrlCreateButton("Std.+1", 0, 40, 43, 41, 0)
$StdMinus = GUICtrlCreateButton("Std.-1", 48, 40, 43, 41, 0)
$MinPlus = GUICtrlCreateButton("Min.+1", 112, 40, 43, 41, 0)
$MinMinus = GUICtrlCreateButton("Min.-1", 160, 40, 43, 41, 0)
$SekPlus = GUICtrlCreateButton("Sek.+1", 224, 40, 43, 41, 0)
$SekMinus = GUICtrlCreateButton("Sek.-1", 272, 40, 43, 41, 0)
$Schliessen = GUICtrlCreateButton("Schließen", 120, 88, 75, 33, 0)

GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###



While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $ZeitButton
		If GUICtrlRead($StopPasswort) = "Passwort" Then
		GUISetState(@SW_SHOW, $Zeitfenster)
	EndIf
	
Case $Schliessen
	GUISetState(@SW_HIDE, $Zeitfenster)
	
	;Zeit einstellen START
Case $StdPlus
	GUICtrlSetData($Stunden, GUICtrlRead($Stunden) +1)

Case $StdMinus
	GUICtrlSetData($Stunden, GUICtrlRead($Stunden) -1)
	

	
	
Case $MinPlus
	GUICtrlSetData($Minuten, GUICtrlRead($Minuten) +1)
	;Überprüfen ob die Zahl der Minuten 60 ist.
 If GUICtrlRead($Minuten) = 60 Then
	GUICtrlSetData($Stunden, Guictrlread($Stunden) +1)
	GUICtrlSetData($Minuten,"00")
 EndIf

Case $MinMinus
	GUICtrlSetData($Minuten, GUICtrlRead($Minuten) -1)
	;Überprüfen ob die Zahl der Minuten -60 ist.
	If GUICtrlRead($Minuten) = -60 Then
	GUICtrlSetData($Stunden, Guictrlread($Stunden) -1)
	GUICtrlSetData($Minuten,"00")
EndIf

Case $SekPlus
	GUICtrlSetData($Sekunden, GUICtrlRead($Sekunden) +1)
	;Überprüfen ob die Zahl der Sekunden 60 ist.
	If GUICtrlRead($Sekunden) = 60 Then
	GUICtrlSetData($Minuten, Guictrlread($Minuten) +1)
	GUICtrlSetData($Sekunden,"00")
	EndIf
	
	
Case $SekMinus
	GUICtrlSetData($Sekunden, GUICtrlRead($Sekunden) -1)
	;Überprüfen ob die Zahl der Sekunden -60 ist.
	If GUICtrlRead($Sekunden) = -60 Then
	GUICtrlSetData($Minuten, Guictrlread($Minuten) -1)
	GUICtrlSetData($Sekunden,"00")
	EndIf
	;Zeit einstellen ENDE
	

Case $Stop
	 If GUICtrlRead($StopPasswort) = "Passwort" Then
		 
		 ;HIER kommt die STOP funktion rein^^
  
	EndIf


Case $Start
	;Countdown START
		While 1
			
 
			
			
			
			
			
			
		Sekunden_runterzaehlen()
		
	If Guictrlread($Sekunden) = "0" Then ;Überprüft ob die Sekunden auf 0 stehen.
		If GUICtrlRead($Minuten) >= "0" Then ;Weil die Sekunden auf 0 stehen, wird überprüft ob die Minuten 1 oder höher als 1 ist.
			GUICtrlSetData($Sekunden,"60") ;Weil die Minuten 1 oder höher als 1 waren,werden die Sekunden wieder auf 60 gestellt.
			GUICtrlSetData($Minuten, Guictrlread($Minuten) -1) ;Die Minuten werden hier um eine reduziert.
		
		
			
		If GUICtrlRead($Minuten) = "0" Then
		If GUICtrlRead($Stunden) >= "1" Then
			GUICtrlSetData($Minuten,"60")
			GUICtrlSetData($Stunden, Guictrlread($Stunden) -1)

        Else
		
		GUICtrlSetData($Stunden,"00") ;Weil der Countdown abgelaufen ist, stellt sich die zeit auf 00 statt auf 0 ;D nur um es ansehnlicher zu machen.
		
		GUICtrlSetData($Minuten,"00") ;Weil der Countdown abgelaufen ist, stellt sich die zeit auf 00 statt auf 0 ;D nur um es ansehnlicher zu machen.
		
		GUICtrlSetData($Sekunden,"00") ;Weil der Countdown abgelaufen ist, stellt sich die zeit auf 00 statt auf 0 ;D nur um es ansehnlicher zu machen.
		

		ExitLoop
		EndIf
	EndIf
EndIf
EndIf

	WEnd
	
;Countdown ENDE
	
	
	
	
	
	
	EndSwitch
WEnd

Func Sekunden_runterzaehlen()
	
	For $i = Guictrlread($Sekunden) To 0 Step -1
			GUICtrlSetData($Sekunden,$i)
			Sleep(1000)
	Next
		
	EndFunc
07/06/2010 20:29 kknb#2
den wert von $nmsg entweder in der schleife abfragen, falls die durchgänge zu lange dauern, sprich der inhalt deiner schleife zu aufwendig ist, einfach $nmsg per adlibregister abfragen. das machst du im endeffekt genauso wie die switch abfrage die dir koda vorgibt.
07/06/2010 21:12 WiiZocker#3
Hmm ok, ich werds nachher VERSUCHEN^^

EDIT: Könntest du mir etwas auf die sprünge helfen?
Wo muss Adlibregister hin und was muss ich dort reinschreiben?

Hoffe du antwortest nochmal:(
07/07/2010 08:12 suiluJ.#4
Wenn du eine While-schleife zu einem bestimmten Zeitpunkt abbrechen lassen willst exitloop
07/07/2010 12:04 WiiZocker#5
Es hat sich erledigt, ich habe es nun doch per hotkey gemacht aber damit der funktioniert braucht man ein passwort, damit man den countdown nicht einfach unterbricht. mitlerweile habe ich schon 2 versionen rausgebracht, die erste war zu unsicher-.- die zwiete (1.1) wird nicht in der leiste unten angezeigt. Und der Taskmanager lässt sich wärend das programm läuft auch nicht öffnen (:
[Only registered and activated users can see links. Click Here To Register...]