Page 1 sur 1
[R] Impossible d'arrêter une boucle do dans une case
Posté : jeu. 03 oct. 2013 17:39
par mica2727
Bonjour,
Je voudrais juste dire que j'ai recherché sur google juste avant de venir je suis tombé sur une fonction pour justement arrêter un while automatique, sauf que sa ne marche pas pour un Do.
Voici le code :
► Afficher le texte
Code : Tout sélectionner
Case $Begin
if $row <> "" AND $row <> 0 AND $row < 5 Then
Do
Sleep(1000)
$time = $time-1
GUICtrlSetData($BeginWorker,$time&"sec")
Until($time = 0)
GUICtrlSetData($BeginWorker,"Go!")
Do
; Compteur de temps écoulé
if $sec_laps < 59 Then
$sec_laps=$sec_laps+1
elseif $sec_laps == 59 Then
$sec_laps=0
$m_laps=$m_laps+1
EndIf
; Pour les minutes
if $m_laps == 59 Then
$m_laps=0
$h_laps=$h_laps+1
EndIf
if $stop_car <> 1 Then
if $s_car > 0 Then
$s_car=$s_car-1
ElseIf $s_car == 0 Then
if $m_car > 0 Then
$m_car=$m_car-1
$s_car=59
EndIf
EndIf
if $m_car == 0 Then
if $h_car > 0 Then
$h_car=$h_car-1
$m_car=59
$s_car=59
EndIf
EndIf
EndIf
if $h_car == 0 AND $m_car == 0 AND $m_car == 0 Then
$stop_car = 1
Endif
; Pour la vigueur
if $time_vigueur < 12 Then
$time_vigueur = $time_vigueur+1
elseif $time_vigueur == 12 Then
GUICtrlSetData($Vigueur,GUICtrlRead($Vigueur)-10)
$time_vigueur = 0
endif
GUICtrlSetData($TimeLapsed,$h_laps&"h "&$m_laps&"min "&$sec_laps&"sec")
GUICtrlSetData($TimeOutil,$h_car&"h "&$m_car&"min "&$s_car&"sec")
Sleep(1000)
Until($stopDo = 1)
Elseif $row == "" Then
MsgBox(64,"Information","Veuillez écrire le nombre d'outil que vous possédez.")
Elseif $row == 0 Then
MsgBox(64,"Information","Veuillez n'avez plus d'outil pour faire les métiers.")
Elseif $row > 4 Then
MsgBox(64,"Information","A moins que tu est CS il est pas possible d'utiliser d'affiler plus de 4 outils.")
EndIf
Et un bouton tout simple quand la personne clique dessus pour arrêter le do ( logiquement sauf que sa ne marche pas )
Code : Tout sélectionner
Case $Stop
$stopDo = 1
MsgBox(64,"Information","Le compteur à bien été stopper")
Les variables sont bien définis de coté la je vais pas tout afficher le code se serais trop long, juste que n'arrive pas a arrêter cette fichu boucle. Et donc ben le programme ne peut pas être fermée.
Cordialement,
Michael.
Re: [..] Impossible d'arrêter une boucle do dans une case
Posté : jeu. 03 oct. 2013 19:12
par yohan8
Si le code n'est pas en entier, il ne serra pas facile de t'aider
Pour sortir d'une boucle tu peux utiliser "ExitLoop"
Re: [..] Impossible d'arrêter une boucle do dans une case
Posté : jeu. 03 oct. 2013 19:34
par mikell
Une fois la boucle lancée tu ne peux plus capter le message d'une boucle précédente, il faut agir en amont au niveau des messages Windows
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("My GUI", 200, 100)
$label = GUICtrlCreateLabel("0", 20, 20, 30, 30)
$begin = GuiCtrlCreateButton("begin", 80, 20, 50, 25)
$stop = GuiCtrlCreateButton("stop", 80, 60, 50, 25)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "_Stop")
Global $i = 0, $s = 0
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $begin
$s = 0
Do
$i += 1
GuiCtrlSetData($label, $i)
Sleep(200)
Until $s = 1
Case $msg = $stop ;<<<<<<<< ne marche pas
$s = 1
EndSelect
WEnd
Func _Stop($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg, $lParam
Switch BitAND($wParam, 0x0000FFFF)
Case $stop
$s = 1
EndSwitch
Return 'GUI_RUNDEFMSG'
EndFunc
NB : Le code en couleur est réservé aux exemples de scripts et de fonctions
Re: [..] Impossible d'arrêter une boucle do dans une case
Posté : jeu. 03 oct. 2013 21:45
par mica2727
Merci Yohan8
Et j'ai bien compris Mikell, que une fois entrée dans la boucle elle va se répété, donc n'y aurais t'il pas une fonction directement à mettre dans un Do, pour savoir si un bouton à été presser ?
C'est bon j'ai trouver

Suffit de rester appuyer 1sec sur le bouton ( ou même ailleur )
Code : Tout sélectionner
if _IsPressed("01",DllOpen("user32.dll")) Then
ExitLoop
EndIf
A mettre juste avant le Sleep(1000) tout en bas.