Page 1 sur 1

[R] Problème fermeture GUi séparément.

Posté : mar. 25 juin 2013 20:09
par Ks10
Bonsoir a tous

J'ai un problème avec mes GUI. J'ai une GUI principale, un bouton qui me permet d'ouvrir une autre GUI et un autre bouton qui ouvre une 3ième GUI.
Si je clique sur le bouton 1 il ouvre ma GUI. Cette GUI possède un bouton "quitter". Si je clique dessus il ferme tout le programme car j'ai mit Exit. Mais si je met Guidelete($magui), il détruit la GUI mais je ne peut pas la réouvrir, en dirait que le programme plante.
Et avec GuiSetState alors ? PAREIL :(

Voici la structure de mon code :

Code : Tout sélectionner

Global $Form1 = GUICreate("******************", 491, 243, 290, 258)
Global $MenuItem1 = GUICtrlCreateMenu("Fichier")
Global $MenuItem2 = GUICtrlCreateMenu("A propos...")
Global $MenuItem3 = GUICtrlCreateMenuItem("bouton1", $MenuItem1)
Global $MenuItem4 = GUICtrlCreateMenuItem("bouton2", $MenuItem1)
GUISetState(@SW_SHOW)

#EndRegion ### END Koda GUI section ###

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg

                    Case $MenuItem3
                $Form2 = GUICreate("GUI2", 809, 523, 132, 105)


                               $Button2 = GUICtrlCreateButton("Quitter", 408, 488, 131, 25)
                GUISetState(@SW_SHOW)
                #EndRegion ### END Koda GUI section ###



While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg

    Case $Button1
                    ACTION

    Case $button2
              EXIT, GUIDELETE($Form2), GuiSetState(@SW_SHOW) ;tester le problème persiste.

 EndSwitch
WEnd

       Case $MenuItem4

               If FileExists("monfichier") Then ; C'est une condition dans mon programme, si le fichier existe il ouvre la gui.
               $Form3 = GUICreate("*********", 809, 523, 132, 105)
               $Button3 = GUICtrlCreateButton("Modifier ", 272, 488, 131, 25)
           $Button4 = GUICtrlCreateButton("Quitter", 408, 488, 131, 25)
                GUISetState(@SW_SHOW)
                #EndRegion ### END Koda GUI section ###

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg


        Case $Button4
            Exit

EndSwitch
WEnd


            ; Fin chargement interface
        Else
            MsgBox(64, "Informations", "Erreur")
        EndIf



 EndSwitch
WEnd
 

Donc voila, avec cette structure, un "EXIT", "GUIDELETE($form2 ou 3)", "GuiSetState(@SW_SHOW)" ne fonctionne pas.
Il ferme a gui mais impossible de la réouvrir.
J'ai fait une recherche et je suis tomber sur le mode OnEvent.
Je suis tomber sur un petit bout de code, celui-la :

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)

$parent1 = GUICreate("Parent1")
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetState(@SW_SHOW)
$parent2 = GUICreate("Parent2")
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetState(@SW_SHOW)
$parent3 = GUICreate("Parent3")
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetState(@SW_SHOW)

While 1
    Sleep(10)
WEnd

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  


MERCI MIKELL ^^

Mais quand j'essaye de l'adapter à mon programme cela ne fonctionne pas.
Je suis encore amateur, la structuration de mes programmes sont encore en mode cochon lol je suis la pour m'améliorer donc tous les conseils sont bon à prendre.

Je vous remercie d'avance pour les éventuelles réponse que vous pourriez m'apporter.

Re: [..] Problème fermeture GUi séparément.

Posté : mar. 25 juin 2013 22:04
par mikell
Tu peux avoir l'équivalent en utilisant GUIGetMsg() avec paramètre (voir explications dans l'aide) , exemple
► Afficher le texte
Mais franchement le oneventmode c'est mieux, une fois que tu as compris le principe c'est à la fois plus sûr, plus rapide et infiniment moins chiant ^^

Re: [..] Problème fermeture GUi séparément.

Posté : mer. 26 juin 2013 07:10
par Maurice
Hello

EXIT termine le script. Essaie EXITLOOP qui te fait sortir de ta boucle uniquement.
Puis c'est vrai que les WHILE 1 imbriqués c'est pas cool.

Tu as aussi la possibilité de créer des GUIs indépendants dans des scripts à part.
1 GUI = 1 script, ensuite tu fermes ce que tu veux quand tu veux

Re: [..] Problème fermeture GUi séparément.

Posté : mer. 26 juin 2013 08:05
par Ks10
Maurice a écrit :Hello

EXIT termine le script. Essaie EXITLOOP qui te fait sortir de ta boucle uniquement.
Puis c'est vrai que les WHILE 1 imbriqués c'est pas cool.

Tu as aussi la possibilité de créer des GUIs indépendants dans des scripts à part.
1 GUI = 1 script, ensuite tu fermes ce que tu veux quand tu veux
Exitloop ne fonctionne pas également x)
J'avait penser à sa aussi, faire des scripts à part. Mais faire un script à part reviendrais à compiler un .exe supplémentaire non ? Ou sinon on peut appeler un script sans qu'il soit compiler et je précise sans utiliser INCLUDE x) qui oblige ensuite à appelez une fonction et non un script directement.

Mikell : Je regarde l'aide ce soir, je suis au taf ^^ Mais je prend quand même le maximum de possibilité :) (merci maurice :p )

Re: [..] Problème fermeture GUi séparément.

Posté : mer. 26 juin 2013 14:16
par mikell

Re: [..] Problème fermeture GUi séparément.

Posté : jeu. 27 juin 2013 00:44
par Sea
Sinon je me permet de mettre ce tuto que j'avais fait y'a fort longtemps ^^

http://www.dailymotion.com/video/xf3kqc ... cttHsEi5po
(il y a des petites erreurs je sais qu'on dis une GUI par exemple mais bon le plus important c'est à dire la création de plusieurs GUI est correct ^^)

et voici le code source final http://pastebin.com/cpDvruzt

Re: [..] Problème fermeture GUi séparément.

Posté : jeu. 27 juin 2013 18:31
par Ks10
Hier je n'est pas eu le temps de me pointer sur le pc.

Je test vos solutions dès ce soir et dès que j'ai un résultat positif et que j'arrive à m'adapter facilement je vous tien au jus :)

Merci à tous !

EDIT : Soucis corriger. Merci :)