[R] Revenir au début d'un while en appuyant sur une touche du clavier
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
- Niveau 3
- Messages : 49
- Enregistré le : jeu. 08 avr. 2010 16:28
- Status : Hors ligne
[R] Revenir au début d'un while en appuyant sur une touche du clavier
Bonjour, j'ai juste une question qui va sembler toute bête :
J'ai un scrit qui contient un while 1 → wend ou plusieurs actions sont faites.
Je voudrais en appuyant sur "ESC" (par exemple) revenir au début de mon while voici une structure de script :
HotKeySet("{ESC}", "TogglePause")
while 1
action1
action2
action3
action 4
....
wend
Func TogglePause()
; quelquechose qui me renvoi (peu importe à quelle action je me trouve) au début de mon while
EndFunc
J'ai un scrit qui contient un while 1 → wend ou plusieurs actions sont faites.
Je voudrais en appuyant sur "ESC" (par exemple) revenir au début de mon while voici une structure de script :
HotKeySet("{ESC}", "TogglePause")
while 1
action1
action2
action3
action 4
....
wend
Func TogglePause()
; quelquechose qui me renvoi (peu importe à quelle action je me trouve) au début de mon while
EndFunc
Modifié en dernier par tomasomalley le mer. 30 août 2023 07:35, modifié 1 fois.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
Le mieux est de mettre la boucle While et son contenu dans une fonction
La hotkey commande alors une variable globale permettant de sortir du While et de la fonction, et puis relance la fonction
La hotkey commande alors une variable globale permettant de sortir du While et de la fonction, et puis relance la fonction
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
- Niveau 3
- Messages : 49
- Enregistré le : jeu. 08 avr. 2010 16:28
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
Merci à toi Mikell !!
Est ce que serait abusé de te demander un petit exemple très simple ?
Est ce que serait abusé de te demander un petit exemple très simple ?
- Nine
- AutoIt MVPs (MVP)
- Messages : 118
- Enregistré le : ven. 17 avr. 2020 01:23
- Localisation : Montréal, Québec
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
Une autre approche consiste à redémarrer le script carrément. J'ai aussi ajouté un paramètre indiquant qu'il y a eu redémarrage (à voir si ça peut être utile dans ton cas).
Code : Tout sélectionner
HotKeySet("{ESC}", Terminate)
HotKeySet("{PAUSE}", TogglePause)
If $CmdLine[0] Then
;DoSomeOnRestart()
Else
;DoSomeNormal()
EndIf
While Sleep(100)
; actions ici
WEnd
Func TogglePause()
ConsoleWrite("Reset" & @CRLF)
Run(@AutoItExe & " /AutoIt3ExecuteScript " & @ScriptName & " 1")
Exit
EndFunc
Func Terminate()
Exit
EndFunc
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
Bin je pensais à quelque chose comme çatomasomalley a écrit : ↑ven. 25 août 2023 15:20Est ce que serait abusé de te demander un petit exemple très simple ?
Personnellement, s'il devait y avoir des données collectées précédemment à conserver, je préfère cette approche.... sinon c'est kif
HotKeySet("{ESC}", "_exit")
HotKeySet("{F2}", "_stop")
Global $stop = 0
GUICreate("My GUI", 100, 70)
$label = GUICtrlCreateLabel("0", 40, 30, 50, 20)
GUISetState()
_run()
Func _run()
While not $stop
Sleep(300)
GuiCtrlSetData($label, GuiCtrlRead($label)+1)
Wend
GuiCtrlSetData($label, "stop")
Sleep(1000)
$stop = 0
Return _run()
EndFunc
Func _stop()
$stop = 1
EndFunc
Func _exit()
Exit
EndFunc
HotKeySet("{F2}", "_stop")
Global $stop = 0
GUICreate("My GUI", 100, 70)
$label = GUICtrlCreateLabel("0", 40, 30, 50, 20)
GUISetState()
_run()
Func _run()
While not $stop
Sleep(300)
GuiCtrlSetData($label, GuiCtrlRead($label)+1)
Wend
GuiCtrlSetData($label, "stop")
Sleep(1000)
$stop = 0
Return _run()
EndFunc
Func _stop()
$stop = 1
EndFunc
Func _exit()
Exit
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- Nine
- AutoIt MVPs (MVP)
- Messages : 118
- Enregistré le : ven. 17 avr. 2020 01:23
- Localisation : Montréal, Québec
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
@mikell Dans le cas où le While contient plusieurs actions (pas une seule comme dans ton exemple), il va falloir attendre la fin du While. Je crois pas que c'était l'objectif initial. Par ailleurs, il y a toujours moyen de passer de l'info au successeur comme dans mon exemple.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
C'est vrai mais mon exemple est archi-basique, juste histoire de montrer le concept. Rien n'empêche au lieu du "While not $stop" d'utiliser un ou plusieurs "If $stop Then Exitloop" à placer entre les actions voire même à l'intérieur de ces actions si besoin
Si les infos à passer au successeur sont quelques arrays ou S.dictionaries etc ça peut devenir relativement complexe. Bien sûr on peut, mais là AMHA on est dans le "pourquoi faire simple quand on peut faire compliqué"
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- Nine
- AutoIt MVPs (MVP)
- Messages : 118
- Enregistré le : ven. 17 avr. 2020 01:23
- Localisation : Montréal, Québec
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
Pas sûr. Dans un cas simple, ça peut aller, mais dans un cas réel, tu vas être d'accord avec moi, que ça peut devenir très laid. Imaginons un while avec une centaine de lignes qui appelle une douzaine de fonctions d'une trentaine de lignes qui elles-mêmes appellent 3-4 fonctions utilitaires. La gestion du $stop devient monstrueuse. Je sais pas si le simple reste simple longtemps.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
Comme il n'y a qu'une seule variable à checker, même si ça doit être fait plein de fois ça reste simple. Laid certes mais simple
De toute façon comme on sait pas ce qu'il y a dans cette boucle While, le nb d'actions, leur finalité etc ébin vu le manque d'infos on va juste laisser le monsieur faire son choix
De toute façon comme on sait pas ce qu'il y a dans cette boucle While, le nb d'actions, leur finalité etc ébin vu le manque d'infos on va juste laisser le monsieur faire son choix
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
- Niveau 3
- Messages : 49
- Enregistré le : jeu. 08 avr. 2010 16:28
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
Bonjour à vous deux et merci également, désolé, j'ai eu un début de semaine chargée, je fait un test sur l'idée de MiKell et reviens vers vous, merci encore.
-
- Niveau 3
- Messages : 49
- Enregistré le : jeu. 08 avr. 2010 16:28
- Status : Hors ligne
Re: revenir au début d'un while en appuyant sur une touche du clavier
Bonjour à vous et merci donc, car je suis arrivé à ce que je voulais.
Vous aviez raison tous les deux, c'est à dire :
Mikell a bien trouvé la sortie basique du while pou y re-rentrer ...
Mais Nine avait raison en disant que effectivement, dans mon While je fais plein de trucs, du coup je devais effectivement attendre la fin de mon while ce qui n'étais pas ce que je recherchais ...
J'ai donc opté pour la solution un peu cracra du
"If $stop Then Exitloop"
placé un peu partout (mais pas trop
et ça fonctionne comme je le souhaite, merci à vous et à cette communauté
Vous aviez raison tous les deux, c'est à dire :
Mikell a bien trouvé la sortie basique du while pou y re-rentrer ...
Mais Nine avait raison en disant que effectivement, dans mon While je fais plein de trucs, du coup je devais effectivement attendre la fin de mon while ce qui n'étais pas ce que je recherchais ...
J'ai donc opté pour la solution un peu cracra du
"If $stop Then Exitloop"
placé un peu partout (mais pas trop
et ça fonctionne comme je le souhaite, merci à vous et à cette communauté
- Nine
- AutoIt MVPs (MVP)
- Messages : 118
- Enregistré le : ven. 17 avr. 2020 01:23
- Localisation : Montréal, Québec
- Status : Hors ligne
Re: [R] Revenir au début d'un while en appuyant sur une touche du clavier
Bon je sais que quelques fois ça me prend du temps à réagir, mais voici, pourquoi sortir de la boucle quand on peut juste faire un :
"if $stop Then ContinueLoop". Pourquoi faire compliqué quand on peut faire simple (me semble que j'ai entendu ça y a pas longtemps)...
"if $stop Then ContinueLoop". Pourquoi faire compliqué quand on peut faire simple (me semble que j'ai entendu ça y a pas longtemps)...
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R] Revenir au début d'un while en appuyant sur une touche du clavier
Pfff... bien sûr. C'était tellement évident qu'on n'y a même pas pensé
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )