Je vais détailler mon besoin :
Les plus nostalgiques se rappellerons peut être l’interface basique de Winamp, composée de plusieurs fenêtres que l’on pouvait attacher façon magnet, ou détacher via leur barres de titres respectives.
Lorsque ces fenetres sont attachées, il est possible de les déplacer ensembles, simplement en faisant un glisser – déplacer à partie de la barre de titre de la fenêtre principales.
Ceux qui utilisent toujours koda auront remarqués que les 4 fenêtres-menus de bases bougent de la même façon.
Dans mon exemple, je prends deux fenêtres en mode pop-up, que je vais déplacer via un contrôle « image ».
Voici mon début de code :
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <array.au3>
;============================= Variables ==========================
Global $My_1st_GUI ;=> ces variables sont une composante génériques, mais necessaires ...
Global $My_2nd_GUI ;=> ...pour la fonction WinS_SetPosition($My_1st_GUI, $My_2nd_GUI)
;==================================================================
;============================= Variables ==========================
; Je crée ma première fenêtre $Gui_01
;==================================================================
#Region ### START Koda GUI section ### Form=
Global $GUI_01 = GUICreate("GUI 01", 252, 202, -1, -1, $WS_POPUP, BitOR($WS_EX_CONTEXTHELP,$WS_EX_WINDOWEDGE))
Global $Pic1 = GUICtrlCreatePic("", 8, 8, 185, 41, -1, BitOR($WS_EX_CLIENTEDGE,$GUI_WS_EX_PARENTDRAG))
Global $Label1 = GUICtrlCreateLabel("Gui 01", 72, 88, 97, 41, BitOR($SS_CENTER,$SS_CENTERIMAGE))
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
Global $ButtonClose_1 = GUICtrlCreateButton("X", 200, 8, 43, 41)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
;============================= Variables ==========================
; Je crée ma deuxième fenêtre $Gui_02
;==================================================================
#Region ### START Koda GUI section ### Form=
Global $GUI_02 = GUICreate("GUI 01", 252, 202, 732, 576, $WS_POPUP, BitOR($WS_EX_CONTEXTHELP,$WS_EX_WINDOWEDGE))
Global $Pic2 = GUICtrlCreatePic("", 8, 8, 185, 41, -1, BitOR($WS_EX_CLIENTEDGE,$GUI_WS_EX_PARENTDRAG))
Global $Label2 = GUICtrlCreateLabel("Gui 02", 72, 88, 97, 41, BitOR($SS_CENTER,$SS_CENTERIMAGE))
GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
Global $ButtonClose_2 = GUICtrlCreateButton("X", 200, 8, 43, 41)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
_Win_SetPosition($GUI_01, $GUI_02) ; cette fonction permet de positionner la deuxième fenetre ($gui_02) correctement avant son affichage.
While 1
$nMsg = GUIGetMsg(1)
Select
Case $nMsg[0] = $ButtonClose_1 And $nMsg[1] = $GUI_01
Exit
Case $nMsg[0] = $ButtonClose_2 And $nMsg[1] = $GUI_02
Exit
EndSElect
WEnd
func _Win_SetPosition($My_1st_GUI, $My_2nd_GUI)
;============================= Variables ==========================
; Je détermine la taille et la position de ma première fenetre
;==================================================================
Dim $pos_1st_Gui = WinGetPos($My_1st_GUI)
;==================================================================
; Ensuite, je déplace ma seconde fenetre, de deux fois la hauteur de la première fenetre + 2 (je reste sur les mêmes coordonnées X).
;==================================================================
WinMove($My_2nd_GUI, "", $pos_1st_Gui[0], ($pos_1st_Gui[1] + $pos_1st_Gui[3] + 2))
WinSetState($My_1st_GUI, "", @SW_SHOW)
WinSetState($My_2nd_GUI, "", @SW_SHOW)
WinSetOnTop($My_1st_GUI, "", 1)
WinSetOnTop($My_2nd_GUI, "", 1)
EndFunc
Je sais que le sujet a déjà été abordé sous d’autre formes sur ce forum, mais les exemples de code ne donnaient pas le résultat que je cherche.
Les fonction GUIRegisterMsg, GUIGetCursorInfo, et mousegetpos seront surement necessaire.
J’avoue etre encore à éplucher le très bon article wiki sur GUIRegisterMsg.
Je fais donc appel à la sympathie et la patience de ceux d’entre vous qui pourraient me fournir un exemple de code suffisamment détaillé.
Ps : j'ai du mal à voir ce que j'ai loupé sur les actions pour fermer les fenetres, ou les déplacer, car il ne fonctionnent pas.