Page 1 sur 1
[R] GUIOnEvent again ^^
Posté : lun. 12 nov. 2012 15:10
par GhostLine
Yop !
Bon, je me retrouve dans une situation où je suis obligé de rendre un peu plus saine ma manière de gérer les fenêtres, au risque de me perdre dans un code tentaculaire. J'étais un peu réticent à l'idée d'utiliser GUIOnEventMode, mais là, plus le choix ^^
J'ai fait un petit test, qui suit :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
$parent1 = GUICreate("Form1", 265, 122, 522, 265)
$Button1 = GUICtrlCreateButton("1", 8, 8, 121, 105)
GUICtrlSetOnEvent(-1, "OnePressed")
$Button2 = GUICtrlCreateButton("2", 136, 8, 121, 105)
GUICtrlSetOnEvent(-1, "TwoPressed")
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetState(@SW_SHOW)
$parent2 = GUICreate("Form1", 265, 122, 522, 265)
$Label1 = GUICtrlCreateLabel("1", 120, 32, 16, 42)
GUICtrlSetFont(-1, 24, 400, 0)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetState(@SW_HIDE)
$parent3 = GUICreate("Parent3", 265, 122, 522, 265)
$Label2 = GUICtrlCreateLabel("2", 120, 32, 16, 42)
GUICtrlSetFont(-1, 24, 400, 0)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetState(@SW_HIDE)
While 1
Sleep(10)
WEnd
Func OnePressed()
GUISetState(@SW_SHOW, $parent2)
EndFunc ;==>OnePressed
Func TwoPressed()
GUISetState(@SW_SHOW, $parent3)
EndFunc ;==>TwoPressed
Func SpecialEvents()
Select
Case @GUI_CtrlId = $GUI_EVENT_CLOSE
If @GUI_WinHandle = $parent1 Then Exit
If @GUI_WinHandle = $parent2 Then GUIDelete($parent2)
If @GUI_WinHandle = $parent3 Then GUIDelete($parent3)
EndSelect
EndFunc ;==>SpecialEvents
Ca fonctionne, mais je ne peux cliquer qu'une seule fois sur chaque bouton : pourquoi ?
Merci d'avance de votre aide !
Re: [..] GUIOnEvent again ^^
Posté : lun. 12 nov. 2012 16:08
par sylvanie
Bonjour,
c'est parce que tu détruis les fenêtres 1 et/ou 2 en cas de close. Et donc les handles associés pointent sur rien après destruction. A partir de là tu demandes de faire un "show" d'une fenêtre détruite.
Il faut donc :
- soit cacher les fenêtres au lieu de les détruire :
► Afficher le texte
Code : Tout sélectionner
Func SpecialEvents()
Select
Case @GUI_CtrlId = $GUI_EVENT_CLOSE
If @GUI_WinHandle = $parent1 Then Exit
If @GUI_WinHandle = $parent2 Then GUISetState(@SW_HIDE ,$parent2)
If @GUI_WinHandle = $parent3 Then GUISetState(@SW_HIDE ,$parent3)
EndSelect
EndFunc ;==>SpecialEvents
- soit les reconstruire et mettre à jour les handle (TBD

)
Re: [..] GUIOnEvent again ^^
Posté : lun. 12 nov. 2012 17:05
par mikell
ça être big evidence
Un GuiSetState après un GuiDelete n'a jamais donné de résultat significatif, ça se saurait

Re: [..] GUIOnEvent again ^^
Posté : mar. 13 nov. 2012 08:03
par GhostLine
Spa faux

Merci de votre aide, les gars, j'étais fatigué hier
