Page 1 sur 1
[R] Gestions des GUI Childs
Posté : lun. 07 avr. 2014 16:45
par cluster49
Bonjour,
Je viens vers vous car n'étant pas très à l'aise en autoit je suis en train de m'embrouiller tout seul avec la gestion de fenêtre secondaires (childs) et je n'arrive pas à m'en sortir
Voici un exemple qui ne fonctionne pas et je ne comprends pas comment imbriquer les lignes de code pour que ça fonctionne correctement.
Lorsque je clique sur le bouton annuler de GUI_CHILD2 cela ferme bien GUI_CHILD1 et GUI_CHILD2 mais pour fermer la GUI principale il faut cliquer deux fois sur la croix de fermeture en haut de la fenêtre.
De plus il faut cliquer deux fois sur la croix de fermeture de GUI_CHILD2 pour que cette fenêtre se ferme.
Enfin lorsque les 3 fenêtres sont ouvertes je voudrais qu'en cliquant sur la croix de fermeture de la GUI principale cela ferme toutes les fenêtres mais là encore il faut cliquer deux fois pour que ça fonctionne.
Merci pour votre aide
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$hGUI =GUICreate("Principale", 200, 200) ; Crée une boite de dialogue
$hButton_Child1 = GUICtrlCreateButton("Child 1", 10, 10)
GUISetState()
While 1
$msg = GUIGetMsg(1)
Select
Case $msg[0] = $GUI_EVENT_CLOSE
If $msg[1] = $hGUI Then
Exit
ElseIf $msg[1] = $hGUI_Child1 Then
GUISwitch($hGUI_Child1)
GUIDelete()
ElseIf $msg[1] = $hGUI_Child2 Then
GUISwitch($hGUI_Child2)
GUIDelete()
EndIf
Case $msg[0] = $hButton_Child1
$hGUI_Child1 = GUICreate("Child1", 200, 200, -1, -1, -1, -1, $hGUI)
$hButton_Child2 = GUICtrlCreateButton("Child 2", 10, 10)
GUISetState()
Do
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
GUIDelete($hGUI_Child1)
Case $msg = $hButton_Child2
$hGUI_Child2 = GUICreate("Child 2", 200, 200)
$annuler = GUICtrlCreateButton("Annuler", 10, 10)
GUISetState()
Do
$msg = GUIGetMsg()
Select
Case $msg = $annuler
GUISwitch($hGUI_Child2)
GUIDelete()
GUISwitch($hGUI_Child1)
GUIDelete()
EndSelect
Until $msg = $GUI_EVENT_CLOSE OR $msg = $annuler
EndSelect
Until $msg = $GUI_EVENT_CLOSE
EndSelect
WEnd
Re: [..] Gestions des GUI Childs
Posté : lun. 07 avr. 2014 17:06
par mikell
Si tu veux que tes guis gardent leur autonomie, faut tout gérer dans la boucle principale
Avec GUIGetMsg(1), attention à la déclaration des variables en tête de script
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Global $hGUI_Child1, $hButton_Child1=-1
Global $hGUI_Child2, $hButton_Child2=-1, $annuler=-1
$hGUI =GUICreate("Principale", 200, 200, 500, 100)
$hButton_Child1 = GUICtrlCreateButton("Child 1", 10, 10)
GUISetState()
While 1
$msg = GUIGetMsg(1)
Select
Case $msg[0] = $GUI_EVENT_CLOSE
If $msg[1] = $hGUI Then
Exit
ElseIf $msg[1] = $hGUI_Child1 Then
GUIDelete($hGUI_Child1)
ElseIf $msg[1] = $hGUI_Child2 Then
GUIDelete($hGUI_Child2)
EndIf
Case $msg[0] = $hButton_Child1
$hGUI_Child1 = GUICreate("Child1", 200, 200, 550, 150)
$hButton_Child2 = GUICtrlCreateButton("Child 2", 10, 10)
GUISetState()
Case $msg[0] = $hButton_Child2
$hGUI_Child2 = GUICreate("Child 2", 200, 200, 600, 200)
$annuler = GUICtrlCreateButton("Annuler", 10, 10)
GUISetState()
Case $msg[0] = $annuler
GUIDelete($hGUI_Child1)
GUIDelete($hGUI_Child2)
EndSelect
WEnd
Re: [..] Gestions des GUI Childs
Posté : mar. 08 avr. 2014 10:06
par cluster49
Merci pour ta réponse mikell,
En essayant ton code je me rends compte que les problèmes que je décris dans mon premier postes sont toujours là
Existe t-il un moyen d'éviter de cliquer deux fois pour que les fenêtres se ferment ?
Re: [..] Gestions des GUI Childs
Posté : mar. 08 avr. 2014 13:28
par jguinch
Re: [..] Gestions des GUI Childs
Posté : mar. 08 avr. 2014 14:11
par mikell
En l'état sur mon XP si on ouvre les 3 guis le code fait que
- 1 clic sur la croix de fermeture de GUI_CHILD2 => ferme GUI_CHILD2
- 1 clic sur la croix de fermeture de GUI_CHILD1 => ferme GUI_CHILD1
- 1 clic sur annuler => ferme GUI_CHILD1 et GUI_CHILD2
- 1 clic sur la croix de fermeture de la gui principale => ferme tout et quitte le script
Quand on clique sur une croix, le mousedown active la fenêtre et le mouseup envoie $GUI_EVENT_CLOSE
A aucun moment je n'ai besoin de cliquer 2 fois
Dans ce cas un clic sur n'importe laquelle des 3 croix de fermeture ferme tout et quitte le script
Re: [..] Gestions des GUI Childs
Posté : mar. 08 avr. 2014 17:39
par cluster49
Un grand merci mickell, ton code fonctionne parfaitement, c'est moi qui me suis embrouillé.
Du coup ta correction m'a permis de bien comprendre la gestion des GUIs childs.