[R] Revenir au début d'un while en appuyant sur une touche du clavier

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
tomasomalley
Niveau 3
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

#1

Message 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
Modifié en dernier par tomasomalley le mer. 30 août 2023 07:35, modifié 1 fois.
Avatar du membre
mikell
Spammer !
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

#2

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
tomasomalley
Niveau 3
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

#3

Message par tomasomalley »

Merci à toi Mikell !!
Est ce que serait abusé de te demander un petit exemple très simple ? ;-)
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 104
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: revenir au début d'un while en appuyant sur une touche du clavier

#4

Message 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
Avatar du membre
mikell
Spammer !
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

#5

Message 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 = 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 )
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 104
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: revenir au début d'un while en appuyant sur une touche du clavier

#6

Message 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.
Avatar du membre
mikell
Spammer !
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

#7

Message 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é" :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 104
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: revenir au début d'un while en appuyant sur une touche du clavier

#8

Message 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. :wink:
Avatar du membre
mikell
Spammer !
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

#9

Message 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 :mrgreen:
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 )
tomasomalley
Niveau 3
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

#10

Message 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.
tomasomalley
Niveau 3
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

#11

Message 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é ;-)
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 104
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: [R] Revenir au début d'un while en appuyant sur une touche du clavier

#12

Message 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)...
Avatar du membre
mikell
Spammer !
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

#13

Message par mikell »

Pfff... bien sûr. C'était tellement évident qu'on n'y a même pas pensé :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre