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
fermerFenetreFille()
ExitLoop
Je pense que c'est mieux ainsi :P

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 :P

#include <GUIConstantsEx.au3>

HotKeySet("{ESC}", "Tilt")

$gui = GUICreate("test", 400, 100)
GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
    Sleep(10)
WEnd

Func Tilt()
    MsgBox(0, "", "tilt")
EndFunc  

Cela dit, même sans hotkeyset ça ne pose pas vraiment de problème ^^

#include <Misc.au3>

Global $gui2

$gui = GUICreate("test", 400, 100)
GUISetState()

fenetreFille()

While 1
  Sleep(10)
WEnd

Func fenetreFille()
   $gui2 = GUICreate("fille", 200, 200, 200, 200)
   GUISetState()

   While 1
   If _IsPressed("1B") then
      fermerFenetreFille()
      ; ExitLoop
   EndIf
   WEnd
EndFunc

Func fermerFenetreFille()
   GuiDelete($gui2)
EndFunc

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 $gui
Global $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)
WEnd

Func fenetreFille()
   GUISetState(@SW_SHOW, $gui2)
EndFunc

Func fermerFenetreFille()
    GUISetState(@SW_HIDE, $gui2)
EndFunc

Func quit()
   Exit
EndFunc

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.