Page 1 sur 1

[R] Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 12:45
par YuChan
Bonjour, j'ai ce bout de code :

Voici la GUI :

Code : Tout sélectionner

Func _GUIListeConfig()
	Global $GUIListeConfigs = GUICreate("Configs", 319, 156, 684, 408)
	$GroupBox1 = GUICtrlCreateGroup("", 8, 1, 305, 97)
	Global $Combo1 = GUICtrlCreateCombo("", 72, 56, 169, 25)
	$Label1 = GUICtrlCreateLabel("Selectionnez une Configuration", 48, 16, 226, 24)
	GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $ButtonCharger= GUICtrlCreateButton("OK", 73, 107, 75, 25)
	Global $ButtonAnnuler = GUICtrlCreateButton("Cancel", 170, 107, 75, 25)
EndFunc
Et la partie code

Code : Tout sélectionner

While 1
		Switch GUIGetMsg()
		
		Case $ChargerChoixMenu
			$choixMenu = GUICtrlRead($listMenu)
			
			
			If $choixMenu ==  "Test MENU" Then
				_loadListeConfig()
				
				While 1
					Switch GUIGetMsg()
						
						Case $ButtonAnnuler
							Exit

					EndSwitch
				Wend			

			EndIf
			
		Case $GUI_EVENT_CLOSE, $btnclose
			Exit
				
	EndSwitch 
WEnd 
Pouvez vous m'expliquer pour quand je clique sur le bouton **$ButtonAnnuler** sa me ferme tout le programme si je met **Exitloop** ne fait aucune action

Cdt

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 13:50
par walkson
Bonjour,
A première vue, il y a une erreur dans vos déclarations de variables. Elles doivent être au début du code et surtout pas dans une fonction.

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 14:00
par YuChan
bonjour.

De quelle variable parler vous.

Car je vois aucune déclaration de valeur

Cdt

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 14:09
par walkson
un exemple Global $GUIListeConfigs = GUICreate("Configs", 319, 156, 684, 408)
Après je ne vois pas l’intérêt d'une double boucle ?
Si vous mettiez un code complet, on pourrait comprendre !

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 14:13
par YuChan
OK.
Mais tout marche sinon.

Pour la GUI j'ai fait une fonction car je l'appel plusieurs fois.

Ma question c'est pour quoi ExitLoop ne marche pas.

On peut que avec 1 seul WHILE ? J'aiemrai bien savoir comment

Cdt, et encore merci

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 15:10
par walkson
à priori exitloop fonctionne et vous fait quitter la deuxième boucle
J'ai l'impression que l'utilisation du mode événementiel serait plus utile pour votre code. Un exemple:

Code : Tout sélectionner

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

Global $GUIListeConfigs = GUICreate("Configs", 320, 157, 684, 408)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUIListeConfigsClose")
Global $GroupBox1 = GUICtrlCreateGroup("", 8, 1, 305, 97)
Global $Combo1 = GUICtrlCreateCombo("", 72, 56, 169, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Test|Test MENU","Test")
GUICtrlSetOnEvent(-1, "Combo1Change")
Global $Label1 = GUICtrlCreateLabel("Selectionnez une Configuration", 48, 16, 226, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $ButtonCharger = GUICtrlCreateButton("OK", 73, 107, 75, 25)
GUICtrlSetOnEvent(-1, "ButtonChargerClick")
Global $ButtonAnnuler = GUICtrlCreateButton("Cancel", 170, 107, 75, 25)
GUICtrlSetOnEvent(-1, "ButtonAnnulerClick")
GUISetState(@SW_SHOW)


While 1
 Sleep(100)
WEnd

Func ButtonAnnulerClick()
	GUISetState(@SW_HIDE)
	Sleep(1000)
	GUISetState(@SW_SHOW)
EndFunc
Func ButtonChargerClick()
	GUISetState(@SW_HIDE)
	Sleep(1000)
	GUISetState(@SW_SHOW)
EndFunc
Func Combo1Change()
	$choixMenu = GUICtrlRead($Combo1)
	If $choixMenu ==  "Test MENU" Then
		_loadListeConfig()
		GUICtrlSetData($Combo1, "Test")
	EndIf
EndFunc
Func GUIListeConfigsClose()
	Exit
EndFunc
Func _loadListeConfig()
	MsgBox(32,"","coucou")
EndFunc

Regardez aussi dans l'aide avec GUICtrlSetOnEvent()
Mais dans tous les cas, c'est une mauvaise idée de mettre une boucle dans une autre (sauf cas particulier)

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 15:17
par YuChan
Merci.

Helas en tant que debutant je ne comprends pas vraiement.
J'ai juste 2 fenetres, et je souhaietrai fermer la child.

CDT

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 16:02
par YuChan
Alors j'ai j'ai fais au plus simple

Code : Tout sélectionner


Global $ButtonAnnuler = ""

While 1
		Switch GUIGetMsg()
		
		Case $ChargerChoixMenu
			$choixMenu = GUICtrlRead($listMenu)
			
			
			If $choixMenu ==  "Test MENU" Then
				_loadListeConfig()		

			EndIf
			
		Case $GUI_EVENT_CLOSE, $btnclose
		
		Case $ButtonAnnuler
			ExitLoop
				
	EndSwitch 
WEnd 
Cela fonctionne sauf que toute les fenetre se ferment.
Je veux en fermer une.

merci

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 16:13
par walkson
Comme ceci ? (je répondez au post 7)

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $GUIListeConfigs, $ButtonAnnuler, $ButtonCharger, $Combo1, $Form2, $Button1
Form_1()

While 1
 Sleep(100)
WEnd
Func Form_1()
	$GUIListeConfigs = GUICreate("Configs", 320, 157, 684, 408)
	GUISetOnEvent($GUI_EVENT_CLOSE, "GUIListeConfigsClose")
	$GroupBox1 = GUICtrlCreateGroup("", 8, 1, 305, 97)
	$Combo1 = GUICtrlCreateCombo("", 72, 56, 169, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
	GUICtrlSetData(-1, "Test|Test MENU","Test")
	GUICtrlSetOnEvent(-1, "Combo1Change")
	$Label1 = GUICtrlCreateLabel("Selectionnez une Configuration", 48, 16, 226, 24)
	GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$ButtonCharger = GUICtrlCreateButton("OK", 73, 107, 75, 25)
	GUICtrlSetOnEvent(-1, "ButtonChargerClick")
	$ButtonAnnuler = GUICtrlCreateButton("Cancel", 170, 107, 75, 25)
	GUICtrlSetOnEvent(-1, "ButtonAnnulerClick")
	GUISetState(@SW_SHOW)
EndFunc
;=============================== Form_2 =======================================
Func Form_2()
	$Form2 = GUICreate("Form2", 280, 184)
	GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close")
	$Button1 = GUICtrlCreateButton("Action", 96, 72, 81, 41)
	GUICtrlSetOnEvent(-1, "Button1Click")
	GUISetState(@SW_SHOW, $Form2)
	GUISetState(@SW_HIDE, $GUIListeConfigs)
EndFunc
Func Form2Close()
	GUIDelete($Form2)
	GUISetState(@SW_SHOW, $GUIListeConfigs)
EndFunc
Func Button1Click()
	MsgBox(32,"","coucou")
EndFunc
;=============================== Form_2 =======================================

;=============================== command Form_1 ===============================
Func ButtonAnnulerClick()
	GUISetState(@SW_HIDE)
	Sleep(1000)
	GUISetState(@SW_SHOW)
EndFunc
Func ButtonChargerClick()
	Form_2()
EndFunc
Func Combo1Change()
	$choixMenu = GUICtrlRead($Combo1)
	If $choixMenu ==  "Test MENU" Then
		_loadListeConfig()
		GUICtrlSetData($Combo1, "Test")
	EndIf
EndFunc
Func GUIListeConfigsClose()
	Exit
EndFunc
Func _loadListeConfig()
	Form_2()
EndFunc
La boucle While sert uniquement à maintenir le code en vie
Les commandes sont envoyées par GUICtrlSetOnEvent(-1, "Combo1Change") (par exemple pour le combo) vers une fonction
Vous pouvez ouvrir, cacher ou détruire autant de GUI que vous voulez
Vous remarquerez les déclarations Global en début de script

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 16:24
par walkson
si vous voulez fermer une fenêtre il faut utiliser GUIDelete($Form) ou
GUISetState(@SW_HIDE,$Form)
Si vous utilisez exitloop vous sortez de la boucle et votre code s’arrête.

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 16:33
par YuChan
Oui merci.

J'ai bien GUIDelete($Form) qui ferme (ou le cache) le programme mais je peux plus rien faire sur mon appli.
Sinon tout fonctionne...

Une Idée ?

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 18:19
par YuChan
Je mets ce que j'ai.

Code : Tout sélectionner

	Global $GUI = GUICreate("Appli Photo", 540, 501, 593, 389)
	$Group1 = GUICtrlCreateGroup("Journal", 8, 8, 273, 369)
	Global $journal = GUICtrlCreateEdit("", 16, 32, 257, 329, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN))
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$Group3 = GUICtrlCreateGroup("Menu Principal", 289, 8, 239, 137)
	Global $listMenu = GUICtrlCreateList("", 304, 24, 209, 97, BitXOR($GUI_SS_DEFAULT_LIST, $LBS_SORT))
	GUICtrlSetData(-1, "Charger une image|---------|Creer une image|")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$Group4 = GUICtrlCreateGroup("News", 288, 304, 241, 185)
	Global $journalNews = GUICtrlCreateEdit("", 296, 328, 225, 153, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN) )
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$Group5 = GUICtrlCreateGroup("Action", 288, 152, 241, 137)
	Global $ChargerChoixMenu = GUICtrlCreateButton("Valider le choix", 344, 168, 139, 49)
	Global $btnclose = GUICtrlCreateButton("Fermer le Logiciel", 344, 232, 139, 41)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	GUISetState(@SW_SHOW)



	While 1
		Switch GUIGetMsg()
		
		Case $ChargerChoixMenu
			$choixMenu = GUICtrlRead($listMenu)
			
			
			If $choixMenu ==  "Charger une Image" Then
	Global $GUIListeConfigs = GUICreate("Configs", 319, 156, 684, 408)
	$GroupBox1 = GUICtrlCreateGroup("", 8, 1, 305, 97)
	Global $Combo1 = GUICtrlCreateCombo("", 72, 56, 169, 25)
	$Label1 = GUICtrlCreateLabel("Selectionnez une Configuration", 48, 16, 226, 24)
	GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $ButtonChargerConfig = GUICtrlCreateButton("&OK", 73, 107, 75, 25)
	Global $ButtonAnnulerChargerImage = GUICtrlCreateButton("&Cancel", 170, 107, 75, 25)
	#EndRegion ### END Koda GUI secw²tion ###
				GUISetState(@SW_SHOW)
				
				While 1
					Switch GUIGetMsg()						
						Case $ButtonAnnulerChargerImage						
							GUIDelete()
					EndSwitch
				Wend
			EndIf
			
		Case $GUI_EVENT_CLOSE, $btnclose
			Exit
				
	EndSwitch 
WEnd 
J'ai pas mis les variable mais elles sont bien presente...

Du coup je peux pas etre plus claire

Re: Fermer une fenetre dans autoit  

Posté : mer. 29 sept. 2021 19:14
par walkson
Ah ! enfin un bout de code :D
J'ai repris votre code et fait des modifications
Il faut lancer les 2 guis au départ sinon ça beug. En suite j'ai supprimé la croix de fermeture de la gui 2 pour qu'il n'y ait pas d'interaction avec la gui 1 (la fermeture de la gui 2 entraine la fermeture de la gui 1)
Pour réaliser un code proprement, je vous invite à regarder l'aide GUIGetMsg() à l'exemple 2 où il n'y a plus d'interaction entre les 2 guis ou d'utiliser le code événementiel comme je l'avais proposé parce que ce que je vous propose n'est pas terrible !!! mais c'est simple :lol:

Code : Tout sélectionner

	#include <ButtonConstants.au3>
	#include <EditConstants.au3>
	#include <ListBoxConstants.au3>
	#include <ComboConstants.au3>
	#include <GUIConstantsEx.au3>
	#include <WindowsConstants.au3>
	Global $GUI = GUICreate("Appli Photo", 540, 501, 593, 389)
	$Group1 = GUICtrlCreateGroup("Journal", 8, 8, 273, 369)
	Global $journal = GUICtrlCreateEdit("", 16, 32, 257, 329, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN))
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$Group3 = GUICtrlCreateGroup("Menu Principal", 289, 8, 239, 137)
	Global $listMenu = GUICtrlCreateList("", 304, 24, 209, 97, BitXOR($GUI_SS_DEFAULT_LIST, $LBS_SORT))
	GUICtrlSetData(-1, "Charger une image|---------|Creer une image|")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$Group4 = GUICtrlCreateGroup("News", 288, 304, 241, 185)
	Global $journalNews = GUICtrlCreateEdit("", 296, 328, 225, 153, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN) )
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$Group5 = GUICtrlCreateGroup("Action", 288, 152, 241, 137)
	Global $ChargerChoixMenu = GUICtrlCreateButton("Valider le choix", 344, 168, 139, 49)
	Global $btnclose = GUICtrlCreateButton("Fermer le Logiciel", 344, 232, 139, 41)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	GUISetState(@SW_SHOW, $GUI)
;=====================================================================================================
	Global $GUIListeConfigs = GUICreate("Configs", 319, 160,-1,-1, $WS_OVERLAPPED)
	$GroupBox1 = GUICtrlCreateGroup("", 8, 1, 305, 97)
	Global $Combo1 = GUICtrlCreateCombo("", 72, 56, 169, 25)
	$Label1 = GUICtrlCreateLabel("Selectionnez une Configuration", 48, 16, 226, 24)
	GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $ButtonChargerConfig = GUICtrlCreateButton("&OK", 73, 107, 75, 25)
	Global $ButtonAnnulerChargerImage = GUICtrlCreateButton("&Cancel", 170, 107, 75, 25)
	GUISetState(@SW_HIDE, $GUIListeConfigs)


	While 1
		Switch GUIGetMsg()

		Case $ChargerChoixMenu
			$choixMenu = GUICtrlRead($listMenu)
			ConsoleWrite($choixMenu & @CRLF)
			If $choixMenu =  "Charger une Image" Then
				GUISetState(@SW_SHOW, $GUIListeConfigs)
			EndIf
		Case $ButtonAnnulerChargerImage
			GUISetState(@SW_HIDE, $GUIListeConfigs)

		Case $GUI_EVENT_CLOSE, $btnclose
			Exit

	EndSwitch
WEnd

Re: Fermer une fenetre dans autoit

Posté : mer. 29 sept. 2021 21:26
par mikell
On peut aussi utiliser le "paramètre avancé" de GuiGetMsg pour savoir quelle gui $GUI_EVENT_CLOSE doit fermer, comme indiqué par exemple dans le wiki

Edit
Ah oui, c'est l'exemple 2 de l'aide pour GuiGetMsg :mrgreen:

Re: Fermer une fenetre dans autoit

Posté : jeu. 30 sept. 2021 18:06
par YuChan
Super

Comment on fait en sorte que avec une MsgBox flag 4, on arrete le script lors d'un clique sur No?

J'ai bien essayé Exit et ExitLoop mais je peux continuer le script a la place de juste fermer la MsgBox.

Code : Tout sélectionner

If ($msg = 7) Then ExitLoop 

Re: Fermer une fenetre dans autoit

Posté : jeu. 30 sept. 2021 18:53
par mikell
Aaattends, tu dis que si tu mets un truc comme ça

$msg = MsgBox(4, ....)
If $msg = 7 Then Exit

ça quitte pas le script quand tu cliques sur le "Non" de la Msgbox ?

Re: Fermer une fenetre dans autoit

Posté : ven. 01 oct. 2021 05:37
par YuChan
Sa quitte le proraemme

Mos je vioudrais juste quitter la 'pupupup message retry ou autre

Merci

Re: Fermer une fenetre dans autoit

Posté : ven. 01 oct. 2021 06:58
par YuChan
OK probleme résolue mais c'est moche et brouillon comme solution que j'ai trouvé.

Je suis resté dans le standard avec ça :

Code : Tout sélectionner

$msg =  MsgBox(4, "test ", "Bienvenue dans l'editeur Souhaitez-vous continuer ?")

If ($msg <> 7) Then
REUSSI
Else
... ON CONTINUE
EndIf

Re: [R] Fermer une fenetre dans autoit

Posté : ven. 01 oct. 2021 11:20
par YuChan
juste une derniere question.

Code : Tout sélectionner

	While 1
		Switch GUIGetMsg()

			Case $ChargerChoixMenu
				$choixMenu = GUICtrlRead($listMenu)
				ConsoleWrite($choixMenu & @CRLF)
				If $choixMenu =  "Charger un fichier" Then
					_loadListeConfig() ;Charge La liste des config
					GUISetState(@SW_SHOW, $GUIListeConfigs)
				EndIf
		EndSwitch
	WEnd
				
			
Le contenu de _loadListeConfig()

Code : Tout sélectionner

Func _loadListeConfig()
	
	$aFileList = _FileListToArray("Configs","*")
	
	$sFilePath = @ScriptDir & "\Configs\"

	GUIListeConfigs()

	For $i = 0 To $aFileList[0] 
		$conf =  $aFileList[$i]
		
		If $conf == "Config" & $i & ".txt" Then
			$patch = $sFilePath & $conf
			Local $sRead = IniRead($patch, "1", "NOM", "Default Value")
			$allConfigFile = "Config " & $i & " - " & $sRead & "|"
	
			GUICtrlSetData($Combo1, $allConfigFile, "Config 1 - " & $sRead)
		EndIf
	Next

	
EndFunc
Le contenu de GUIListeConfigs()

Code : Tout sélectionner

	Global $GUIListeConfigs = GUICreate("Configs", 319, 156, 684, 408)
	$GroupBox1 = GUICtrlCreateGroup("", 8, 1, 305, 97)
	Global $Combo1 = GUICtrlCreateCombo("", 72, 56, 169, 25)
	$Label1 = GUICtrlCreateLabel("Selectionnez une Configuration", 48, 16, 226, 24)
	GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	Global $ButtonChargerConfig = GUICtrlCreateButton("OK", 73, 107, 75, 25)
	Global $ButtonAnnulerChargerConfig = GUICtrlCreateButton("Cancel", 170, 107, 75, 25)
	GUISetState(@SW_HIDE, $GUIListeConfigs)
Mon probleme est que il est impossible de femerr la gui $GUIListeConfigs en cliquant sur le bouton Cancel

Code : Tout sélectionner

					_loadListeConfig() ;Charge La liste des config
					GUISetState(@SW_SHOW, $GUIListeConfigs)