Page 1 sur 1
[R] Revenir au début d'un while en appuyant sur une touche du clavier
Posté : mar. 22 août 2023 16:59
par tomasomalley
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
Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : mar. 22 août 2023 18:19
par mikell
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
Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : ven. 25 août 2023 15:20
par tomasomalley
Merci à toi Mikell !!
Est ce que serait abusé de te demander un petit exemple très simple ?

Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : ven. 25 août 2023 16:41
par Nine
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
Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : ven. 25 août 2023 18:46
par mikell
tomasomalley a écrit : ↑ven. 25 août 2023 15:20Est ce que serait abusé de te demander un petit exemple très simple ?
Bin je pensais à quelque chose comme ça
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 = 0GUICreate("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
()EndFuncFunc _stop
() $stop = 1EndFuncFunc _exit
() ExitEndFunc
Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : ven. 25 août 2023 19:25
par Nine
@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.
Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : sam. 26 août 2023 09:11
par mikell
Nine a écrit : ↑ven. 25 août 2023 19:25@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.
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é"

Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : sam. 26 août 2023 13:24
par Nine
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.

Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : sam. 26 août 2023 17:22
par mikell
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
Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : mar. 29 août 2023 16:31
par tomasomalley
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.
Re: revenir au début d'un while en appuyant sur une touche du clavier
Posté : mer. 30 août 2023 07:32
par tomasomalley
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é

Re: [R] Revenir au début d'un while en appuyant sur une touche du clavier
Posté : sam. 09 sept. 2023 01:10
par Nine
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)...
Re: [R] Revenir au début d'un while en appuyant sur une touche du clavier
Posté : sam. 09 sept. 2023 07:05
par mikell
Pfff... bien sûr. C'était tellement évident qu'on n'y a même pas pensé
