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 13:33
Localisation : Eure et Loir
Contact :
Status : Hors ligne

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

#1

Message par LaTMoT » lun. 23 juil. 2018 11:16

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 : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#2

Message par walkson » mar. 24 juil. 2018 09:26

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

Avatar du membre
LaTMoT
Niveau 1
Niveau 1
Messages : 12
Enregistré le : ven. 15 sept. 2017 13:33
Localisation : Eure et Loir
Contact :
Status : Hors ligne

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

#3

Message par LaTMoT » mar. 24 juil. 2018 10:20

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 : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#4

Message par walkson » mar. 24 juil. 2018 12:07

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

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5757
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#5

Message par mikell » mar. 24 juil. 2018 12:28

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 13:33
Localisation : Eure et Loir
Contact :
Status : Hors ligne

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

#6

Message par LaTMoT » mer. 25 juil. 2018 08:13

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