Bonjour à tous!
C'est mon premier tuto, et j’espère que je serai assez clair!
Je vais vous apprendre la méthode que j'utilise pour créer des GUIs dans mes programmes, c'est une méthode qui va paraitre trop casse tête pour si simple, mais je vous assure qu'elle s'avère redoutablement efficace et super simple à gérer dans des gros scripts avec plusieurs GUIs.
Il y a 2 principes de base:
- Chaque GUI avec sa fonction
- Les fonctions de GUIs dans un fichier séparer (pour faire plus propre)
1 - Création des GUIs
On va utiliser Koda, ou ce que vous voulez!
L'essentiel c'est que au final, on ait le code
► Afficher le texteGUI Principale
Code : Tout sélectionner
$GUI_Principale = GUICreate("Fenêtre Principale", 283, 255, 471, 184)
$B1 = GUICtrlCreateButton("Fenêtre 1", 104, 73, 75, 25)
$B2 = GUICtrlCreateButton("Fenêtre 2", 104, 103, 75, 25)
$B3 = GUICtrlCreateButton("Fenêtre 3", 104, 133, 75, 25)
► Afficher le texteGUIs secondaires
Code : Tout sélectionner
$GUI_ = GUICreate("", 172, 124, 302, 218)
$B_Close = GUICtrlCreateButton("Fermer", 48, 48, 75, 25)
GUISetState(@SW_SHOW)
2 - Mise en place des fonctions de GUIs
Je met chaque GUI dans un fonction, cette fonction simplifie grandement la gestion ultérieur de la GUI (Création, destruction, Montrer, Cacher...)
Cette fonction prendra en paramètre une valeur parmi ces 4
Code : Tout sélectionner
Global Enum $__GUI_CREATE, $__GUI_DELETE, $__GUI_SHOW, $__GUI_HIDE
C'est ce paramètre qui dira à la fonction que faire avec le code de la GUI.
Aussi, puisque le code de la GUI sera dans une fonction, il faudra déclarer au préalable toutes les variables des controls et de la GUI elle même, à l'extérieur de la fonction.
Enfin, on met toutes ces fonctions dans un fichier unique, que l'on inclura dans le fichier principal du script.
Voici le fichier:
► Afficher le texteGUIs.au3
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: Matwachich
Script Function:
Définition des GUIs
#ce ----------------------------------------------------------------------------
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
; Paramètres des fonctions
Global Enum $__GUI_CREATE, $__GUI_DELETE, $__GUI_SHOW, $__GUI_HIDE
; Déclaration des variables des GUIs
; - Principale
Global $GUI_Principale, $B1, $B2, $B3
; - 1
Global $GUI_1, $B_1_Close
; - 2
Global $GUI_2, $B_2_Close
; - 3
Global $GUI_3, $B_3_Close
; ##############################################################
; Fonction de la GUI Principale
Func _GUI_Principale($flag = $__GUI_CREATE)
Switch $flag
Case $__GUI_CREATE ; Création
$GUI_Principale = GUICreate("Fenêtre Principale", 283, 255, 471, 184)
$B1 = GUICtrlCreateButton("Fenêtre 1", 104, 73, 75, 25)
$B2 = GUICtrlCreateButton("Fenêtre 2", 104, 103, 75, 25)
$B3 = GUICtrlCreateButton("Fenêtre 3", 104, 133, 75, 25)
Case $__GUI_SHOW ; Montrer
GuiSetState(@SW_SHOW, $GUI_Principale)
Case $__GUI_HIDE ; Cacher
GuiSetState(@SW_HIDE, $GUI_Principale)
Case $__GUI_DELETE ; Detruire
GuiDelete($GUI_Principale)
; Quand on supprime la GUI, on remet son Handle à 0 pour tester facilement l'éxistance
; de la GUI (Sans passer par WinExists)
$GUI_Principale = 0
EndSwitch
EndFunc
; Fonction de la GUI 1
Func _GUI_1($flag = $__GUI_CREATE)
Switch $flag
Case $__GUI_CREATE ; Création
$GUI_1 = GUICreate("GUI 1", 172, 124)
$B_1_Close = GUICtrlCreateButton("Fermer", 48, 48, 75, 25)
Case $__GUI_SHOW ; Montrer
GuiSetState(@SW_SHOW, $GUI_1)
Case $__GUI_HIDE ; Cacher
GuiSetState(@SW_HIDE, $GUI_1)
Case $__GUI_DELETE ; Detruire
GuiDelete($GUI_1)
; Quand on supprime la GUI, on remet son Handle à 0 pour tester facilement l'éxistance
; de la GUI (Sans passer par WinExists)
$GUI_1 = 0
EndSwitch
EndFunc
; Fonction de la GUI 2
Func _GUI_2($flag = $__GUI_CREATE)
Switch $flag
Case $__GUI_CREATE ; Création
$GUI_2 = GUICreate("GUI 2", 172, 124)
$B_2_Close = GUICtrlCreateButton("Fermer", 48, 48, 75, 25)
Case $__GUI_SHOW ; Montrer
GuiSetState(@SW_SHOW, $GUI_2)
Case $__GUI_HIDE ; Cacher
GuiSetState(@SW_HIDE, $GUI_2)
Case $__GUI_DELETE ; Detruire
GuiDelete($GUI_2)
; Quand on supprime la GUI, on remet son Handle à 0 pour tester facilement l'éxistance
; de la GUI (Sans passer par WinExists)
$GUI_2 = 0
EndSwitch
EndFunc
; Fonction de la GUI 3
Func _GUI_3($flag = $__GUI_CREATE)
Switch $flag
Case $__GUI_CREATE ; Création
$GUI_3 = GUICreate("GUI 3", 172, 124)
$B_3_Close = GUICtrlCreateButton("Fermer", 48, 48, 75, 25)
Case $__GUI_SHOW ; Montrer
GuiSetState(@SW_SHOW, $GUI_3)
Case $__GUI_HIDE ; Cacher
GuiSetState(@SW_HIDE, $GUI_3)
Case $__GUI_DELETE ; Detruire
GuiDelete($GUI_3)
; Quand on supprime la GUI, on remet son Handle à 0 pour tester facilement l'éxistance
; de la GUI (Sans passer par WinExists)
$GUI_3 = 0
EndSwitch
EndFunc
3 - Le script principale
Dans le script principale, il faut tout d'abord inclure le fichier contenant les GUIs
En suite, pour manipuler les GUIs, on utilise tout simplement leurs fonctions!
Regardez plutôt!
► Afficher le texteMain.au3
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: Matwachich
Script Function:
Tuto: Gestion de GUIs
#ce ----------------------------------------------------------------------------
#include "GUIs.au3"
; On créer la GUI principale
_GUI_Principale()
; Et on l'affiche
_GUI_Principale($__GUI_SHOW)
; Boucle principale
While 1
; On récupère les Messages des GUIs en mode étendu, pour gérer plusieurs GUIs
$MSG = GuiGetMsg(1)
Select
; On test l'existence de la GUI Principale, si c'est le cas,
; on voit si le message émane bien d'elle
Case $GUI_Principale <> 0 And $MSG[1] = $GUI_Principale
Switch $MSG[0]
Case $GUI_EVENT_CLOSE
Exit
Case $B1
If $GUI_1 = 0 Then
; Si la GUI n'existe pas, on la créer
_GUI_1()
_GUI_1($__GUI_SHOW)
Else
; Si non, on l'active au premier plan
WinActivate($GUI_1)
EndIf
Case $B2
; Idem GUI 2
If $GUI_2 = 0 Then
_GUI_2()
_GUI_2($__GUI_SHOW)
Else
WinActivate($GUI_2)
EndIf
Case $B3
; Idem GUI 3
If $GUI_3 = 0 Then
_GUI_3()
_GUI_3($__GUI_SHOW)
Else
WinActivate($GUI_3)
EndIf
EndSwitch
; ---
; On test l'existence de la GUI 1, si c'est le cas,
; on voit si le message émane bien d'elle
Case $GUI_1 <> 0 And $MSG[1] = $GUI_1
Switch $MSG[0]
Case $GUI_EVENT_CLOSE, $B_1_Close
; Si on ferme la GUI 1, alors on la détruit
_GUI_1($__GUI_DELETE)
EndSwitch
; ---
; On test l'existence de la GUI 2, si c'est le cas,
; on voit si le message émane bien d'elle
Case $GUI_2 <> 0 And $MSG[1] = $GUI_2
Switch $MSG[0]
Case $GUI_EVENT_CLOSE, $B_2_Close
; Si on ferme la GUI 1, alors on la détruit
_GUI_2($__GUI_DELETE)
EndSwitch
; ---
; On test l'existence de la GUI 3, si c'est le cas,
; on voit si le message émane bien d'elle
Case $GUI_3 <> 0 And $MSG[1] = $GUI_3
Switch $MSG[0]
Case $GUI_EVENT_CLOSE, $B_3_Close
; Si on ferme la GUI 1, alors on la détruit
_GUI_3($__GUI_DELETE)
EndSwitch
EndSelect
Wend
Voila! J'espère que ça sera utile!