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
Code : Tout sélectionner
While 1
$msg = GuiGetMsg(1)
Switch $msg[0]
Case $GUI_EVENT_CLOSE
Switch $msg[1]
Case $gui_principale
Exit ; ou GuiDelete($gui_principale)
Case $gui_fille1
GuiDelete($gui_fille1)
Case $gui_fille2
GuiDelete($gui_fille2)
EndSwitch
Case $bouton1
; ...... (ouvre $gui_fille1)...
Case $bouton2
; ...... (ouvre $gui_fille2)...
EndSwitch
Wend
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
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
@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
Code : Tout sélectionner
#RequireAdmin
#NoTrayIcon
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
$NPCCreator = GUICreate("NPC Creator by GaMeR", 322, 139, -1, -1)
GUISetBkColor(0xC8C8C8)
$Group1 = GUICtrlCreateGroup("Créations NPCs : ", 8, 8, 305, 105)
GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
GUICtrlSetColor(-1, 0x808000)
$Button1 = GUICtrlCreateButton("NPC Templates", 24, 26, 233, 33, $WS_GROUP)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
GUICtrlSetCursor (-1, 0)
$Button2 = GUICtrlCreateButton("NPC Réponse Actions", 24, 71, 233, 33, $WS_GROUP)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
GUICtrlSetCursor (-1, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label1 = GUICtrlCreateLabel("Version : 1.0", 8, 116, 102, 20)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x000080)
$Label2 = GUICtrlCreateLabel("By GaMeR", 240, 116, 78, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x808000)
$Button3 = GUICtrlCreateButton("Config", 260, 27, 48, 78, $WS_GROUP)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
GuiDelete($NPCCreator)
Case $Button1 ; Ouvre une Nouvelle GUI.
_NPCTemplate()
Case $Button2 ; Ouvre une Nouvelle GUI
_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
; ...
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 ...
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

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

Au premier abord j'y ai cru

mais en lisant le reste j'ai compris
Et c'est moi ou locos974 ne s'exprime pas bien car là une fois sur deux j'étais à côté de la plaque

Re: [..] Fermé une Gui parmis d'autre.
Posté : mar. 23 oct. 2012 20:51
par FireFox
Bon on va récapituler...
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$GUI_1 = GUICreate("MyGUI 1")
$btn1 = GUICtrlCreateButton("Button", 10, 10, 80, 22)
GUISetState()
$GUI_2 = GUICreate("MyGUI 2")
$btn2 = GUICtrlCreateButton("Button", 10, 10, 80, 22)
GUISetState()
$GUI_3 = GUICreate("MyGUI 3")
$btn3 = GUICtrlCreateButton("Button", 10, 10, 80, 22)
GUISetState()
While 1
$aMsg = GUIGetMsg(1)
Switch $aMsg[1]
Case $GUI_1
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete($GUI_1)
Case $btn1
ConsoleWrite("Button GUI_1" & @CrLf)
EndSwitch
Case $GUI_2
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete($GUI_2)
Case $btn2
ConsoleWrite("Button GUI_2" & @CrLf)
EndSwitch
Case $GUI_3
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete($GUI_3)
Case $btn3
ConsoleWrite("Button GUI_3" & @CrLf)
EndSwitch
EndSwitch
Sleep(10)
WEnd
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
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
If WinExists($NPCTemplate) Then
Switch $nMsg[0]
Case $Button1_delagui_NPCTemplate
; ......
Case $Button2_delagui_NPCTemplate
; ......
EndSwitch
EndIf
If WinExists($NPCRA) Then
Switch $nMsg[0]
Case $Button1_delagui_NPCRA
; ......
EndSwitch
EndIf
WEnd
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é !
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

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) !