Page 1 sur 2

[R] Fermé une Gui parmis d'autre.

Posté : dim. 21 oct. 2012 22:28
par locos974
Bonjour,

J'ai crée un petit tools pour un amis.
Et mon problème est qu'on peux ouvrir plusieurs Gui, grâce à 2 bouton ( chacun ouvre 1 Gui ) et donc avec la 'X' croix rouge en haut a droit ( $GUI_EVENT_CLOSE ) pour fermer que celle-ci est non les autres.

Mon script se compose d'une fenêtre principale avec les deux boutons.
Et les autres se sont des Func avec une GuiCreate et une Boucle.

Merci d'avance. Cordialement Locos974.

Re: [..] Fermé une Gui parmis d'autre.

Posté : dim. 21 oct. 2012 22:55
par FireFox
Bonsoir,
Je ne comprend pas trop ton problème, si tu veux que les autres se ferment avec la fenêtre principale, tu as juste à les cacher lorsque tu caches la principale.

Cdlt, FireFox.

Re: [..] Fermé une Gui parmis d'autre.

Posté : lun. 22 oct. 2012 00:17
par mikell
Hum je vois (sujet traité quelques dizaines de fois)
Tu veux pouvoir fermer les gui séparément, c'est ça ?
Faut utiliser le paramètre de GuiGetMsg et faire ta boucle comme ça, mais attention, pas d'autre boucle While ailleurs ake sinon ça va merder et il faudra alors passer en mode OnEvent
► Afficher le texte

Re: [..] Fermé une Gui parmis d'autre.

Posté : lun. 22 oct. 2012 15:22
par TommyDDR
Si vous débutez, oubliez GUIGetMsg(), comme l'a dit Mikell, utilisez le mode OnEvent.

Re: [..] Fermé une Gui parmis d'autre.

Posté : lun. 22 oct. 2012 15:36
par mikell
Exemple équivalent en mode OnEvent
► Afficher le texte
@TommyDDR
Le problème quand on débute c'est que tous les exemples du fichier d'aide dans la rubrique "Gui Management" sont construits avec des boucles GuiGetMsg, donc vaut ptêt mieux apprendre à maîtriser ça avant de s'attaquer au mode OnEvent (même si celui-ci est effectivement bien meilleur)

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 19:46
par locos974
Merci de toute vos réponse !
mikell a écrit :Hum je vois (sujet traité quelques dizaines de fois)
Tu veux pouvoir fermer les gui séparément, c'est ça ?
Faut utiliser le paramètre de GuiGetMsg et faire ta boucle comme ça, mais attention, pas d'autre boucle While ailleurs ake sinon ça va merder et il faudra alors passer en mode OnEvent
Ceci je l'avais déjà interprété mais cela provoque un 'bug'. Je ne peux plus appuyer sur un bouton ou quitter la fenêtre,.. En gros le script est considéré sur PAUSE.
► Afficher le texte
Voilà mon code source. Sauf que j'aimerais que si j'appuie sur la croix rouge de la Gui NPCTemplate, sa supprime celle ci. Et idem pour l'autre.
Je vais essayer pour le OnEvent.

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 19:50
par FireFox
Hm... ca marche bien chez moi, ça doit venir de tes fonctions NCP qui doivent contenir un loop.

Edit : Je pense que tu veux que le script se ferme quand tu fermes la fenêtre?
Dans ce cas ajoute un Exit après ton GUIDelete.

Cdlt, FireFox.

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 19:52
par mikell
Question
Si les 2 nouvelles gui contiennent des controles (boutons...) , où est-ce que ces controles sont gérés ?

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 20:03
par locos974
Dans une Func soit :
Func NPCTemplate()
Toute la gui..

While 1
Switch $nMsg
$nMsg = GuiGetMsg()

Case $botton1
...

EndSwitch
Wend
Endfunc

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 20:21
par FireFox
Il faut que tu regroupes tes While dans le principal en utilisant le code fourni par mikell au post #2.

Cdlt, FireFox.

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 20:29
par mikell
Qu'est-ce que ça peut être gonflant les gens qui répondent sans avoir lu le post ... :evil:
mikell a écrit :Faut utiliser le paramètre de GuiGetMsg et faire ta boucle comme ça, mais attention, pas d'autre boucle While ailleurs ake sinon ça va merder
Donc
1) tu dois gérer tous les controles de toutes les gui dans une seule boucle While
2) pour faire ça tu utilises GuiGetMsg(1) en suivant le modèle de mon 1er post que tu as lu en travers et trop vite

Edit
@FireFox, c'est pas à toi que je dis ça :mrgreen:

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 20:44
par locos974
Voilà :

Code : Tout sélectionner

While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
        Case $GUI_EVENT_CLOSE
            Switch $nMSG[1]
            Case $NPCTemplate
                GuiDelete($NPCTemplate)
            Case $NPCRA
                GuiDelete($NPCRA)
            Case $NPCCreator
                GuiDelete($NPCCreator)
            EndSwitch
        Case $Button1
            _NPCTemplate()
        Case $Button2
            _NPCReponseAction()
        Case $Button3
            _FileCreate(@ScriptDir&"\Config.ini")
            IniWrite(@ScriptDir&"\Config.ini","DataBase","NPC_T","npc_template")
            IniWrite(@ScriptDir&"\Config.ini","DataBase","NPC_Q","npc_questions")
            IniWrite(@ScriptDir&"\Config.ini","DataBase","NPC_RA","npc_reponses_actions")
            ShellExecute(@ScriptDir&"\Config.ini")

    EndSwitch
WEnd
Ceci est la boucle de la première Gui qui permet d'ouvrir les deux autres suivantes.
Mais une question, les autres fonctions de mes autres Gui, je l'est met aussi dans la première While ?

Fin.. Je n'est pas trop compris le système que vous voulez interprété.

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 20:45
par FireFox
mikell a écrit : Edit
@FireFox, c'est pas à toi que je dis ça :mrgreen:
Au premier abord j'y ai cru :lol: mais en lisant le reste j'ai compris :wink:

Et c'est moi ou locos974 ne s'exprime pas bien car là une fois sur deux j'étais à côté de la plaque :cry:

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 20:51
par FireFox
Bon on va récapituler...
► Afficher le texte
Tu peux aussi inverser les switchs comme l'a fait mikell dans son 2ème post.

Cdlt, FireFox.

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 20:56
par mikell
Oui, par exemple comme ça
► Afficher le texte

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 20:58
par locos974
Sauf que je ne veux pas que les 3 Guis se lance toute d'un coup.

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 21:04
par FireFox
T'es pas obligé des toutes les afficher, tu les laisses à l'état par défaut qui est "HIDE" (caché) et quand tu en as besoin tu les affiches avec un GUISetState($taGUI, @SW_SHOW)

Tu peux aussi déclarer les variables des éléments contenus par la GUI + la GUI et la créer ensuite pour éviter les erreurs de variable non déclarée.

Cdlt, FireFox.

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 21:07
par locos974
Pas bête l'idée de la cachée j'avais pas pensé ! :wink:
Je vais essayer sa.

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 21:13
par mikell
ça marchera mais j'aime pas bien le principe de tout balancer d'un coup en gérant ensuite juste la visibilité
d3monCorp a écrit :Et c'est moi ou locos974 ne s'exprime pas bien car là une fois sur deux j'étais à côté de la plaque :cry:
Bin ça serait bien qu'il comprenne les concepts qu'on essaie de lui expliquer, parce que là j'ai l'impression confuse que ça rentre pas :(

Re: [..] Fermé une Gui parmis d'autre.

Posté : mar. 23 oct. 2012 21:17
par FireFox
mikell a écrit :ça marchera mais j'aime pas bien le principe de tout balancer d'un coup en gérant ensuite juste la visibilité
Ca n'a pas de sens si tu as besoin de te servir des fenêtres à des moments différents, car si je suis ce que tu dis, tu devras à chaque fois recréer la fenêtre et ensuite la supprimer ce qui là n'est pas top (à mon goût) !