Page 1 sur 1
[R] Fermeture d'une fenêtre-fille
Posté : lun. 30 avr. 2018 19:16
par GMH
Bonjour,
Je ne parviens pas à fermer une fenêtre-fille contenant une boucle infinie, sans que la fenêtre-mère plante. Je souhaiterais sortir de la boucle et fermer la fenêtre-fille par le bouton ECHAP de mon clavier, tout en retrouvant la main sur la fenêtre-mère.
Code : Tout sélectionner
Func fenetreFille()
Local $hDLL = DllOpen("user32.dll")
While 1
If _IsPressed("1B", $hDLL) then
ExitLoop
fermerFenetreFille()
EndIf
...
Ici le code affichant les valeurs contenues dans un fichier texte, une à une avec un temps de pause entre chacun des affichages
...
WEnd
EndFunc
Func fermerFenetreFille()
FileClose($hFileOpen)
GuiDelete($GUIfenetreFille)
EndFunc
Je vous remercie de votre aide.
Re: [..] Fermeture d'une fenêtre-fille
Posté : lun. 30 avr. 2018 20:24
par walkson
Bonjour,
à l'appel de la touche Echap, la gui se ferme automatiquement. Il faudra utiliser un autre raccourci comme F2
Un remarque sur votre code
Je pense que c'est mieux ainsi

Re: [..] Fermeture d'une fenêtre-fille
Posté : lun. 30 avr. 2018 21:02
par mikell
ESC est utilisé
par défaut pour fermer la gui, mais rien n'interdit de changer ça, avec HotkeySet par exemple
Cela dit, même sans hotkeyset ça ne pose pas vraiment de problème ^^
Re: [..] Fermeture d'une fenêtre-fille
Posté : mar. 01 mai 2018 08:11
par GMH
Bonjour et merci pour vos réponses.
Toutes ces méthodes de fermeture de la fenêtre-fille fonctionnent bien. Le problème est que, après fermeture, je n'ai plus la main sur la fenêtre-mère. Celle-ci est plantée. Le problème se situe donc dans le code de la fenêtre-mère. Il doit y avoir une boucle qui a été contrariée lors de l'ouverture de la fenêtre-fille. Je vais regarder ça de plus près.
Je vous remercie encore.
==============================================================
J'avais, en effet, une boucle lancée dans la fenêtre-mère d'où je n'étais pas sorti lorsque j'ouvrais la fenêtre-fille. Je m'attelle à trouver une solution.
Re: [R] Fermeture d'une fenêtre-fille
Posté : mer. 02 mai 2018 11:18
par TommyDDR
C'est parceque vous restez bloqué dans votre fonction "fenetreFille" à cause de votre while 1.
Il ne faut jamais mettre de boucle infinie dans une fonction, sinon, toute la gestion des évènements est mise en attente.
Et d'une manière plus générale, je vous conseille d'utiliser le mode évènementiel des GUIs -> Opt("GUIOnEventMode", 1)
Cela permettra d'utiliser les fonctions GUISetOnEvent (évènements de fenêtre) et GUICtrlSetOnEvent (évènements de controls) qui permettent d'associer une fonction à un événement précis : quand l’événement arrive, votre fonction est automatiquement lancée (sauf si vous avec bloqué le programme dans une boucle infini)
Dernier conseil, créez toutes vos fenêtre en début de script et affichez / cachez les sur demande au lieu de les recréer / détruire.
#include <GUIConstantsEx.au3>#include <Misc.au3>Opt("GUIOnEventMode", 1)Global $guiGlobal $gui2$gui = GUICreate("test", 400, 100)GUISetOnEvent($GUI_EVENT_CLOSE, quit
, $gui)GUISetState()$gui2 = GUICreate("fille", 200, 200, 200, 200)GUISetOnEvent($GUI_EVENT_CLOSE, fermerFenetreFille
, $gui2)fenetreFille
()While 1 Sleep(10)WEndFunc fenetreFille
() GUISetState(@SW_SHOW, $gui2)EndFuncFunc fermerFenetreFille
() GUISetState(@SW_HIDE, $gui2)EndFuncFunc quit
() ExitEndFunc
Re: [R] Fermeture d'une fenêtre-fille
Posté : mer. 02 mai 2018 13:53
par GMH
Bonjour et merci pour vos conseils. Quand on apprend, on ne prend pas toujours de bonnes habitudes.