Alignement Haut de 2 GUI Centrées à l'écran

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
LaTMoT
Niveau 1
Niveau 1
Messages : 12
Enregistré le : ven. 15 sept. 2017 14:33
Localisation : Eure et Loir
Status : Hors ligne

Alignement Haut de 2 GUI Centrées à l'écran

#1

Message par LaTMoT »

Bonjour,

J'ai réussi à aligner les deux fenêtres mais je ne comprend pas trop comment car j'ai utilisé des valeurs en dur que j'ai trouvé à tâtons.

Est-ce que quelqu'un pourrait m'expliquer le pourquoi du comment ?

Merci.

Code : Tout sélectionner

#include <Constants.au3>
#include <GuiConstants.au3>

;~ CREATION DE LA FENETRE PRINCIPALE
Global $MyPrincipalGui = GUICreate("MA GUI PRINCIPALE", 800, 600, @DesktopWidth/2-400, @DesktopHeight/2-300, -1, $WS_EX_TOOLWINDOW + $WS_EX_WINDOWEDGE) ; TAILLE (800x600)
GUISetBkColor($COLOR_WHITE) ; SUR FOND BLANC

;~ CREATION LABEL TEXTE
GUICtrlCreateLabel("CLIQUER SUR LA FLECHE A DROITE :", 50, 15, 200, 25) ; TEXTE

Local $OptionsButtonShowGui = GUICtrlCreateButton("==>", 740, 10, 50, 25) ; CREATION DU BOUTON POUR LA FENETRE OPTION

;~ CREATION DE LA FENETRE OPTIONS
Global $MyPrincipalGuiOpt = GUICreate("Options", 200 , 100, @DesktopWidth/2-200+605, @DesktopHeight/2-100-200, -1, $WS_EX_TOOLWINDOW + $WS_EX_WINDOWEDGE)
GUISetBkColor($COLOR_WHITE) ; SUR FOND BLANC

;~ GUISetState(@SW_SHOW, $MyPrincipalGuiOpt)
GUISetState(@SW_SHOW, $MyPrincipalGui)

While 1
        $msg = GUIGetMsg()

        Select
                Case $msg = $GUI_EVENT_CLOSE
                        _do_exit_stuff()

				Case $msg = $OptionsButtonShowGui
						GUISetState(@SW_SHOW, $MyPrincipalGuiOpt)
						GUICtrlSetData($OptionsButtonShowGui, "<==")
						If ControlGetText("","", $OptionsButtonShowGui)= "<==" Then
							GUISetState(@SW_HIDE, $MyPrincipalGuiOpt)
							GUICtrlSetData($OptionsButtonShowGui, "==>")
						EndIf
		EndSelect
WEnd

Func _do_exit_stuff()

        Exit

EndFunc   ;==>_do_exit_stuff
Laurent, débutant avec AutoIt :-)

Projet AutoIt en cours : Gestion de mes Tablatures Guitare avec Vidéos des cours.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Alignement Haut de 2 GUI Centrées à l'écran

#2

Message par walkson »

Bonjour,
Pour positionner une gui par rapport à l'autre, il faut utiliser $aPos = WinGetPos($MyPrincipalGui, "")
Cela retourne un array (X, Y, W, H, voir l'aide)

Sur votre code, il y a ControlGetText("","", $OptionsButtonShowGui)= "<==" alors qu'il faut utiliser Guictrlread()

Quand 2 guis sont utilisées, il est utile de préciser à la gui fille qui est le parent, voir GUICreate() (utile mais non indispensable)
Enfin le Mode événementiel facilite la gestion de plusieurs guis. Voir GUICtrlSetOnEvent() dans l'aide.
Si vous utilisez Koda, vous pouvez générer le code en événementiel par Outils => Générer avec options et cocher les cases souhaitées
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
LaTMoT
Niveau 1
Niveau 1
Messages : 12
Enregistré le : ven. 15 sept. 2017 14:33
Localisation : Eure et Loir
Status : Hors ligne

Re: Alignement Haut de 2 GUI Centrées à l'écran

#3

Message par LaTMoT »

Bonjour,

Merci pour ces explications.

J'essaye de les appliquer mais sans succès.

Je vais prendre le temps de réfléchir et reviendrais bientôt :-)

Merci.
Laurent, débutant avec AutoIt :-)

Projet AutoIt en cours : Gestion de mes Tablatures Guitare avec Vidéos des cours.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Alignement Haut de 2 GUI Centrées à l'écran  

#4

Message par walkson »

J'ai retrouvé ce vieux code que j'ai adapté à vos besoins
Je l'avais conservé pour garder en mémoire Func _WM_MOVE ( $hWnd, $Msg, $wParam, $lParam ) qui permet de réajuster la position des fenêtres filles quand la fenêtre parent est déplacée
Un bon exemple en mode événementiel avec 4 guis à gérer
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Opt("GUIOnEventMode", 1) ;mode événementiel
Global $Form2, $Form3, $Form4, $Button1_1
Global $Form1 = GUICreate("Form1 Maitre", 200, 200, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
Global $Button1 = GUICtrlCreateButton("Ouvre", 16, 16, 81, 33)
GUICtrlSetOnEvent(-1, "Button1Click")
Global $Button2 = GUICtrlCreateButton("Button2", 16, 60, 81, 33)
GUICtrlSetOnEvent(-1, "Button2Click")
Global $Button3 = GUICtrlCreateButton("Button3", 16, 104, 81, 33)
GUICtrlSetOnEvent(-1, "Button3Click")
GUISetState(@SW_SHOW)
Global $sPos = WinGetPos($Form1, "")
;_ArrayDisplay($sPos)
GUIRegisterMsg ( $WM_MOVE, "_WM_MOVE" ) ;surveille position fenêtre
While 1
 Sleep(100)
WEnd

Func Button1Click()
   $read = GUICtrlRead($Button1)
   If $read = "Ouvre" Then
   Gui_1()
   GUICtrlSetData($Button1, "Ferme")
   Else
   GUICtrlSetData($Button1, "Ouvre")
   Form2Close()
   EndIf
EndFunc
Func Button2Click()
   Gui_2()
EndFunc
Func Button3Click()
   Gui_3()
EndFunc
Func Form1Close()
Exit
EndFunc

Func Gui_1()
If IsHWnd($Form2) Then Return SetError(1) ;si fenêtre existe, pas de création
$Form2 = GUICreate("Form2", 200, 200, $sPos[0] + $sPos[2] + 20, $sPos[1], $WS_POPUP, -1, $Form1 )
GUISetBkColor(0xFFDD00)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close")
$Button1_1 = GUICtrlCreateButton("Button1", 16, 16, 81, 33)
GUICtrlSetOnEvent(-1, "Button1_1Click")
GUISetState(@SW_SHOW)
EndFunc
Func Button1_1Click()
   MsgBox(0,"","clic", 3, $Form2)
EndFunc
Func Form2Close()
   GUIDelete($Form2)
EndFunc

Func Gui_2()
If IsHWnd($Form3) Then Return SetError(1) ;si fenêtre existe, pas de création
$Form3 = GUICreate("Form3", 200, 200, $sPos[0] - $sPos[2] - 20, $sPos[1], -1, -1, $Form1 )
GUISetOnEvent($GUI_EVENT_CLOSE, "Form3Close")
GUISetState(@SW_SHOW)
EndFunc
Func Form3Close()
   GUIDelete($Form3)
EndFunc

Func Gui_3()
If IsHWnd($Form4) Then Return SetError(1) ;si fenêtre existe, pas de création
$Form4 = GUICreate("Form4", 200, 200, $sPos[0] , $sPos[1] + $sPos[3] + 20, -1, -1, $Form1 )
GUISetOnEvent($GUI_EVENT_CLOSE, "Form4Close")
GUISetState(@SW_SHOW)
EndFunc
Func Form4Close()
   GUIDelete($Form4)
EndFunc

Func _WM_MOVE ( $hWnd, $Msg, $wParam, $lParam ) ;réajuste positions fenêtres enfants
    $sPos = WinGetPos($Form1, "")
    If IsHWnd($Form2) Then WinMove($Form2,"",$sPos[0] + $sPos[2] + 20, $sPos[1])
   If IsHWnd($Form3) Then WinMove($Form3,"",$sPos[0] - $sPos[2] - 20, $sPos[1])
   If IsHWnd($Form4) Then WinMove($Form4,"",$sPos[0] , $sPos[1] + $sPos[3] + 20)
    Return $GUI_RUNDEFMSG
EndFunc ;==> _WM_COMMAND ( )

 
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Alignement Haut de 2 GUI Centrées à l'écran

#5

Message par mikell »

On peut aussi gérer plusieurs gui avec GUIGetMsg + paramètre (voir exemple 2 dans l'aide) :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
LaTMoT
Niveau 1
Niveau 1
Messages : 12
Enregistré le : ven. 15 sept. 2017 14:33
Localisation : Eure et Loir
Status : Hors ligne

Re: Alignement Haut de 2 GUI Centrées à l'écran

#6

Message par LaTMoT »

Bonjour,

Merci Walkson, cela fonctionne parfaitement, je n'ai plus besoin de réfléchir et je pense avoir compris :)

Salut mikell :wink: Merci pour l'information.

@Plus
Laurent, débutant avec AutoIt :-)

Projet AutoIt en cours : Gestion de mes Tablatures Guitare avec Vidéos des cours.
Répondre