Fermer un GUI et revenir au meni

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Fermer un GUI et revenir au meni

#1

Message par YuChan »

Bonjour j'ai ce petit bout de script

La GUI :

Code : Tout sélectionner

$zic = GUICreate("Choix de type de musique", 179, 88, 202, 124)
	$checkRap = GUICtrlCreateCheckbox("Rap", 96, 8, 73, 17)
	$checkClassic = GUICtrlCreateCheckbox("Classic", 8, 8, 65, 17)
	$checkRock = GUICtrlCreateCheckbox("Rock", 8, 32, 65, 17)
	$checkMetal = GUICtrlCreateCheckbox("Metal", 96, 32, 65, 17)
	$Button1 = GUICtrlCreateButton("OK", 8, 56, 75, 25)
	$Button2 = GUICtrlCreateButton("Annuler", 96, 56, 75, 25)
	GUISetState(@SW_HIDE)

Code : Tout sélectionner

;[......]

Case $ButtonChargerConfig
			
			;#####SCRIPT
				GUISetState(@SW_SHOW, $musique)	
				GUISetState(@SW_HIDE, $GUIListeConfigs)	
				
			While 1
			
			 $nMsg = GUIGetMsg()
			 Switch $nMsg
			  Case $GUI_EVENT_CLOSE, $Button2
			   Exit

				Case $Button1

					;#####SCRIPT
						 EndSwitch
			WEnd
Le probleme c'est que quand j'appuie sur le bouton fermer ($boutton2) tout le progrramme se ferme.
Je voudrais juste revenir a la gui principal..

Pouvez vous me guider SVP ??

Merci
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: Fermer un GUI et revenir au meni

#2

Message par TommyDDR »

Vous mettez dans le code, "quand je clic sur la croix ou le $bouton2, je quitte le programme (Exit)"
Case $GUI_EVENT_CLOSE, $Button2
   Exit
Puis vous nous dites que vous ne voulez pas quitter le programme.

Je dirais : enlevez le Exit :)
Si vous voulez cacher votre fenêtre : GUISetState(@SW_HIDE, $zic)
Si vous voulez supprimer votre fenêtre : GUIDelete($zic)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: Fermer un GUI et revenir au meni

#3

Message par YuChan »

Merci.

Pour le exit oui je sais.

Par contre quand quitte la boucle avec ExitLoop ça ma ramene a l'etape suivante et le script continue de s'executer.
Ca fermer juste mon while et ferme la fenetre.

DU coup je sais pas.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: Fermer un GUI et revenir au meni

#4

Message par TommyDDR »

Malheureusement avec le bout de code que vous avez mis, il est difficile de voir le problème.

Sachez juste que si vous avez du temps et l'envie d'apprendre, regardez du côté de :
Opt("GUIOnEventMode", 1)

et des fonctions : GUICtrlSetOnEvent(), GUISetOnEvent()

Cela vous permettra de passer en mode évènement et ne plus devoir véirfier par vous même avec :
$nMsg = GUIGetMsg()
          Switch $nMsg
Avec le mode évènement vos fonctions sont appelées à un évènement précis, quand on clic sur le bouton, hop votre fonction est appelée.
C'est beaucoup plus clair et simple à gérer.

Certes ça prendra 1h ou 2 à prendre en main car c'est une façon différente de faire, mais au final vous serez gagnant.

Avoir des boucles infinies de partout c'est pas l'idéal !

Voici un exemple du mode événementiel :
#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)

Global $gui = GUICreate("GUI principale", 500, 300)
GUISetOnEvent($GUI_EVENT_CLOSE, quit, $gui)
Global $btn = GUICtrlCreateButton("Choix musique", 100, 100, 300, 100)
GUICtrlSetOnEvent($btn, showZic)
GUISetState(@SW_SHOW, $gui)

Global $zic = GUICreate("Choix de type de musique", 179, 88, 202, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, annulerZic, $zic)
Global $checkRap = GUICtrlCreateCheckbox("Rap", 96, 8, 73, 17)
Global $checkClassic = GUICtrlCreateCheckbox("Classic", 8, 8, 65, 17)
Global $checkRock = GUICtrlCreateCheckbox("Rock", 8, 32, 65, 17)
Global $checkMetal = GUICtrlCreateCheckbox("Metal", 96, 32, 65, 17)
Global $Button1 = GUICtrlCreateButton("OK", 8, 56, 75, 25)
GUICtrlSetOnEvent($Button1, validerZic)
Global $Button2 = GUICtrlCreateButton("Annuler", 96, 56, 75, 25)
GUICtrlSetOnEvent($Button2, annulerZic)


While 1
   Sleep(10)
WEnd

Func validerZic()
   Local $txt =   "Validation : " & _
               (isChecked($checkRap) ? "rap" : "pas rap") & "," & _
               (isChecked($checkClassic) ? "classique" : "pas classique") & "," & _
               (isChecked($checkRock) ? "rock" : "pas rock") & "," & _
               (isChecked($checkMetal) ? "metal" : "pas metal")
   MsgBox(0, "", $txt)
   annulerZic()
EndFunc

Func showZic()
   GUISetState(@SW_SHOW, $zic)
EndFunc

Func annulerZic()
   GUICtrlSetState($checkRap, $GUI_UNCHECKED)
   GUICtrlSetState($checkClassic, $GUI_UNCHECKED)
   GUICtrlSetState($checkRock, $GUI_UNCHECKED)
   GUICtrlSetState($checkMetal, $GUI_UNCHECKED)
   GUISetState(@SW_HIDE, $zic)
EndFunc

Func isChecked($ctrlId)
   Return BitOR(GUICtrlRead($ctrlId), $GUI_CHECKED) == $GUI_CHECKED
EndFunc

De cette façon il ne faut plus réfléchir en terme de "quelle fenêtre est active" mais en mode "toute les fenêtres sont actives en même temps, on peut faire ce que l'on veut sur n'importe quelle fenêtre en même temps, car il n'y a plus une boucle infini par gestion de fenêtre.

(Et si vraiment vous voulez bloquer une fenêtre, il suffit d'ajouter GUISetState(@SW_DISABLE, $gui) puis GUISetState(@SW_ENABLE, $gui) pour la réactiver)
Func quit()
   Exit
EndFunc
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: Fermer un GUI et revenir au meni

#5

Message par YuChan »

Merci.

Je souihaite savoir comment fermer la gui dans ce code

Code : Tout sélectionner

Case $ButtonChargerConfig
			
			$choixDeLaConfig = _choixConfig($Combo1)
			
			$confirmDeleteFichierConfig = MsgBox(4, "Warning", "Etes vous sûr de réinitialiser cette config ?")

			if $confirmDeleteFichierConfig =  6 Then
				Global $inputNomConfig= InputBox("Confirmation", "Entréz le nom de la configuration, "")
				
				MsgBox(0, "Choix des utilisateur", "Choisissez le ou les utilisateur")
				
				GUIChoixConfig()
				GUISetState(@SW_SHOW)
				

		While 1


		 $nMsg = GUIGetMsg()
		 Switch $nMsg
		  Case $GUI_EVENT_CLOSE, $Button2
		   ExitLoop 

			Case $Button1

				Global $zic = GUICreate("Choix de type de musique", 180, 89, 202, 124)
				Global $checkRap = GUICtrlCreateCheckbox("Rap", 96, 8, 73, 17)
				Global $checkClassic = GUICtrlCreateCheckbox("Classic", 8, 8, 65, 17)
				Global $checkRock = GUICtrlCreateCheckbox("Rock", 8, 32, 65, 17)
				Global $checkMetal = GUICtrlCreateCheckbox("Metal", 96, 32, 65, 17)
				Global $Button1 = GUICtrlCreateButton("OK", 8, 56, 75, 25)
				Global $Button2 = GUICtrlCreateButton("Annuler", 96, 56, 75, 25)
				GUISetState(@SW_SHOW)
				 
				  If _IsChecked($checkClassic) Then $Classic = "cheked"
		 		If _IsChecked($checkRap) Then $Rap = "checked"
		 		If _IsChecked($checkRock) Then $Rock = "checked"
				 If _IsChecked($checkMetal) Then $Metal = "checked"
				 
				 
				Dim $arr[4][2] = [["rap", $checkRap ], ["classic", $checkClassic], ["rock", $checkRock], ["metal", $checkMetal ]]
				
				If IsArray($arr) Then
					 For $i = 0 to UBound($arr) - 1 ; avec -1 car un array commence à 0
					 ConsoleWrite($arr[$i][0] & ":" & $arr[$i][1] & @LF)
						Global $job = _WriteJob($choixDeLaConfig, $arr)
					 				
					 
					 Next
					 _createNewConfigFile($inputNomMusic)
					 _ecrireNewConfigDansJournal($inputNomMusic)
					 ExitLoop 
				EndIf
			 EndSwitch
		WEnd

				
				GUISetState(@SW_HIDE, $zic)
				$ajusterFenetre= _ajuster()


				If $ajusterFenetre <> 0 Then
					GUISetState(@SW_SHOW, $GUIZIC)
				EndIf
			EndIf
	
	EndSwitch 
 WEnd					


Mon proibleme esty que $ajusterFenetre= _ajuster() se repete tout le temps.

J'ai essayé de repartir de 0 mais je n'y arrive clairement pas.
Répondre