[R]Positionnement deuxieme GUI par dessus la première.
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
[R]Positionnement deuxieme GUI par dessus la première.
Bonjour bonjour,
Une petite question, dans mon script je crée une GUI principale et j'utilise une fonction pour en faire apparaitre une 2ème qui se supprime si on la ferme. Ma question est la suivante : est il possible que ma deuxième GUI puisse s'ouvrir par dessus la première et toujours au centre de celle ci plutôt que de lui donner une position défini sur l'écran en pixel ? C'est a dire que si je déplace ma première GUI de sa position initiale, si j'ouvre la deuxième que celle ci se mette automatiquement au centre et par dessus la première.
En espérant avoir été assez clair.
Merci bien !
Une petite question, dans mon script je crée une GUI principale et j'utilise une fonction pour en faire apparaitre une 2ème qui se supprime si on la ferme. Ma question est la suivante : est il possible que ma deuxième GUI puisse s'ouvrir par dessus la première et toujours au centre de celle ci plutôt que de lui donner une position défini sur l'écran en pixel ? C'est a dire que si je déplace ma première GUI de sa position initiale, si j'ouvre la deuxième que celle ci se mette automatiquement au centre et par dessus la première.
En espérant avoir été assez clair.
Merci bien !
Modifié en dernier par someonescripting le ven. 10 juil. 2020 00:30, modifié 1 fois.
Un bon informaticien, est un informaticien fainéant !
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [..]Positionnement deuxieme GUI par dessus la première.
Bonjour,
Je vous laisse fignoler pour ajuster la position
Après si la position de la GUI principale n'a pas d'importance, vous pouvez faire ceci
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Form1 = GUICreate("Form1", 615, 438)
GUISetState(@SW_SHOW)
$ipos = WinGetPos($Form1)
Global $Form2 = GUICreate("Form1", 400, 300, $ipos[0], $ipos[1],-1,-1,$Form1)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
#include <WindowsConstants.au3>
Global $Form1 = GUICreate("Form1", 615, 438)
GUISetState(@SW_SHOW)
$ipos = WinGetPos($Form1)
Global $Form2 = GUICreate("Form1", 400, 300, $ipos[0], $ipos[1],-1,-1,$Form1)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Après si la position de la GUI principale n'a pas d'importance, vous pouvez faire ceci
Global $Form1 = GUICreate("Form1", 615, 438,-1,-1)
Global $Form2 = GUICreate("Form1", 400, 300, -1, -1,-1,-1,$Form1)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
Re: [..]Positionnement deuxieme GUI par dessus la première.
Bonjour @walkson.
Merci pour ta réponse mais cela ne fonctionne pas comme je le souhaiterais.
En effet, lorsque j'appuie sur le bouton qui m'ouvre ma 2ème gui, celle ci s'ouvre sur le coin supérieur gauche de la GUI principale au lieu du centre (à la rigueur ce n'est pas le plus important), mais si je déplace ma GUI principale après le lancement, lorsque j'appuie sur le bouton, ma 2ème GUI s'ouvre à l'ancienne position de la 1ere.
J’appréciais que celle ci "détecte" la position actuelle de la première GUI pour s'afficher en son centre.
Merci
Merci pour ta réponse mais cela ne fonctionne pas comme je le souhaiterais.
En effet, lorsque j'appuie sur le bouton qui m'ouvre ma 2ème gui, celle ci s'ouvre sur le coin supérieur gauche de la GUI principale au lieu du centre (à la rigueur ce n'est pas le plus important), mais si je déplace ma GUI principale après le lancement, lorsque j'appuie sur le bouton, ma 2ème GUI s'ouvre à l'ancienne position de la 1ere.
J’appréciais que celle ci "détecte" la position actuelle de la première GUI pour s'afficher en son centre.
Merci
Un bon informaticien, est un informaticien fainéant !
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [..]Positionnement deuxieme GUI par dessus la première.
Et en plus, il est difficile. ça va couter plus cher
J'ai repris un code que j'ai modifié. ça explique les fantaisies. La gui fille suit sa mère comme une brave et réapparait en son centre à sa création
J'ai repris un code que j'ai modifié. ça explique les fantaisies. La gui fille suit sa mère comme une brave et réapparait en son centre à sa création
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Opt("GUIOnEventMode", 1) ;mode événementiel
Global $Form2, $Button1_1, $sPos
Global $Form1 = GUICreate("Form1 Maitre", 400, 400, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
Global $Button1 = GUICtrlCreateButton("Ouvre", 16, 16, 81, 33)
GUICtrlSetOnEvent(-1, "Button1Click")
GUISetState(@SW_SHOW)
Global $sPos = WinGetPos($Form1, "")
Global $x = $sPos[0], $y = $sPos[1] ;emplacement initial de $Form1
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 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] + 100, $sPos[1] + 100, $WS_POPUP, $WS_EX_OVERLAPPEDWINDOW, $Form1 )
GUISetBkColor(0xFFDD00)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close")
$Button1_1 = GUICtrlCreateButton("Button1", 16, 16, 81, 33)
GUICtrlSetOnEvent(-1, "Button1_1Click")
GUICtrlCreateLabel("Form2", 16,55,81,33,BitOR(0x1000,0x01,0x0200))
GUICtrlSetFont(-1,16,600)
GUISetState(@SW_SHOW)
For $i = 0 To 255 Step 5
WinSetTrans($Form2, "", $i)
Sleep(10)
Next
EndFunc
Func Button1_1Click()
MsgBox(32,"","clic", 2, $Form1)
EndFunc
Func Form2Close()
For $i = 255 To 0 Step -5
WinSetTrans($Form2, "", $i)
Sleep(10)
Next
GUIDelete($Form2)
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] + 100, $sPos[1] + 100)
Return $GUI_RUNDEFMSG
EndFunc ;==> _WM_COMMAND ( )
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [..]Positionnement deuxieme GUI par dessus la première.
Je vous mets le code initial pour le fun (c'est pas vraiment votre question). Il permet de créer une "grappe" de guis qui suit la Gui mère et se positionnent autour d'elle. Peut être utile pour un de vos futures projet ?...
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Opt("GUIOnEventMode", 1) ;mode événementiel
Global $Form2, $Form3, $Form4, $Button1_1, $sPos
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, "")
Global $x = $sPos[0], $y = $sPos[1] ;emplacement initial de $Form1
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, $WS_EX_OVERLAPPEDWINDOW, $Form1 )
GUISetBkColor(0xFFDD00)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close")
$Button1_1 = GUICtrlCreateButton("Button1", 16, 16, 81, 33)
GUICtrlSetOnEvent(-1, "Button1_1Click")
GUICtrlCreateLabel("Form2", 16,55,81,33,BitOR(0x1000,0x01,0x0200))
GUICtrlSetFont(-1,16,600)
GUISetState(@SW_SHOW)
For $i = 0 To 255 Step 5
WinSetTrans($Form2, "", $i)
Sleep(10)
Next
EndFunc
Func Button1_1Click()
MsgBox(32,"","clic", 2, $Form1)
WinMove($Form1,"",$x, $y)
EndFunc
Func Form2Close()
For $i = 255 To 0 Step -5
WinSetTrans($Form2, "", $i)
Sleep(10)
Next
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)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
Re: [..]Positionnement deuxieme GUI par dessus la première.
Merci @walkson !
Je pense que cela pourrait m'être utile en effet car j'avais pensé à cela à l'origine (fenêtre qui suis sa parente comme bouton 2 et 3), je vais voir ce que je peux faire de tout ça afin de l'adapter à mes besoins et je reviendrais vers vous !
Merci pour ces exemple qui vont m'aider !
Je pense que cela pourrait m'être utile en effet car j'avais pensé à cela à l'origine (fenêtre qui suis sa parente comme bouton 2 et 3), je vais voir ce que je peux faire de tout ça afin de l'adapter à mes besoins et je reviendrais vers vous !
Merci pour ces exemple qui vont m'aider !
Un bon informaticien, est un informaticien fainéant !
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..]Positionnement deuxieme GUI par dessus la première.
Une minime adaptation du code fait l'affaire. Quelle flemme !someonescripting a écrit : ↑jeu. 09 juil. 2020 19:04cela ne fonctionne pas comme je le souhaiterais.
#include <GUIConstantsEx.au3>
$Form1 = GUICreate("Form1", 615, 438)
$btn = GuiCtrlCreateButton("gui 2", 50, 50, 50, 30)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btn
$ipos = WinGetPos($Form1)
$w2 = 400
$h2 = 300
$Form2 = GUICreate("Form1", $w2, $h2, _
$ipos[0]+$ipos[2]/2-$w2/2, $ipos[1]+$ipos[3]/2-$h2/2, -1, -1, $Form1)
GUISetState(@SW_SHOW)
EndSwitch
WEnd
$Form1 = GUICreate("Form1", 615, 438)
$btn = GuiCtrlCreateButton("gui 2", 50, 50, 50, 30)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btn
$ipos = WinGetPos($Form1)
$w2 = 400
$h2 = 300
$Form2 = GUICreate("Form1", $w2, $h2, _
$ipos[0]+$ipos[2]/2-$w2/2, $ipos[1]+$ipos[3]/2-$h2/2, -1, -1, $Form1)
GUISetState(@SW_SHOW)
EndSwitch
WEnd
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- someonescripting
- Niveau 3
- Messages : 44
- Enregistré le : mar. 16 juin 2020 03:55
- Status : Hors ligne
Re: [R]Positionnement deuxieme GUI par dessus la première.
Merci @mikell de ta réponse.
Du coup je me suis débrouillé avec le second exemple de walkson, et cela me convient parfaitement !
Merci pour l'aide encore et toujours !
Du coup je me suis débrouillé avec le second exemple de walkson, et cela me convient parfaitement !
Merci pour l'aide encore et toujours !
Un bon informaticien, est un informaticien fainéant !
Re: [R]Positionnement deuxieme GUI par dessus la première.
Bonjour,
Votre code, Mikell, ferme les deux fenêtres lorsqu'on ferme la fenêtre-fille. Le Case $GUI_EVENT_CLOSE s'applique donc aux deux. Peut-on désactiver la croix de fermeture de la fenêtre-fille ? Si oui, on ajouterait un bouton [Close] dans la fenêtre-fille. Sinon, comment résoudre la question ?
Merci pour ces codes bien utiles.
Votre code, Mikell, ferme les deux fenêtres lorsqu'on ferme la fenêtre-fille. Le Case $GUI_EVENT_CLOSE s'applique donc aux deux. Peut-on désactiver la croix de fermeture de la fenêtre-fille ? Si oui, on ajouterait un bouton [Close] dans la fenêtre-fille. Sinon, comment résoudre la question ?
Merci pour ces codes bien utiles.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R]Positionnement deuxieme GUI par dessus la première.
Ce code était rudimentaire, juste une réponse à la situation évoquée
Pour pouvoir fermer avec la croix la fenêtre fille seulement, il faut (par exemple) utiliser GUIGetMsg avec son paramètre "advanced" pour lui faire retourner l'array qui va bien
Pour pouvoir fermer avec la croix la fenêtre fille seulement, il faut (par exemple) utiliser GUIGetMsg avec son paramètre "advanced" pour lui faire retourner l'array qui va bien
#include <GUIConstantsEx.au3>
$Form1 = GUICreate("Form1", 615, 438)
$btn = GuiCtrlCreateButton("gui 2", 50, 50, 50, 30)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg(1) ;<<<<<
Switch $nMsg[0] ;<<<<<
Case $GUI_EVENT_CLOSE
GuiDelete($nMsg[1]) ;<<<<<
If $nMsg[1] = $Form1 Then Exit
Case $btn
$ipos = WinGetPos($Form1)
$w2 = 400
$h2 = 300
$Form2 = GUICreate("Form1", $w2, $h2, _
$ipos[0]+$ipos[2]/2-$w2/2, $ipos[1]+$ipos[3]/2-$h2/2, -1, -1, $Form1)
GUISetState(@SW_SHOW)
EndSwitch
WEnd
$Form1 = GUICreate("Form1", 615, 438)
$btn = GuiCtrlCreateButton("gui 2", 50, 50, 50, 30)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg(1) ;<<<<<
Switch $nMsg[0] ;<<<<<
Case $GUI_EVENT_CLOSE
GuiDelete($nMsg[1]) ;<<<<<
If $nMsg[1] = $Form1 Then Exit
Case $btn
$ipos = WinGetPos($Form1)
$w2 = 400
$h2 = 300
$Form2 = GUICreate("Form1", $w2, $h2, _
$ipos[0]+$ipos[2]/2-$w2/2, $ipos[1]+$ipos[3]/2-$h2/2, -1, -1, $Form1)
GUISetState(@SW_SHOW)
EndSwitch
WEnd
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [R]Positionnement deuxieme GUI par dessus la première.
Merci pour ce code complétant le premier. Je note tous les codes présentés dans ce fil. Je ne tarderai pas à utiliser l'un ou l'autre. Merci à tous deux.