OVH Cloud OVH Cloud

Déplacement d'une forme

1 réponse
Avatar
Patrice Henrio
J'ai mis une forme2 à l'intérieur d'une forme1.
Je souhaite que lorsque je "resize" la forme1, le sommet en haut à gauche de
la forme2 se déplace de façon à ce que cette forme reste à peu près au même
endroit.
Pour être clair, si ce point se trouve au quart de la hauteur et de la
largeur de la forme1, cela continue à être le cas après un événement
"resize" de la forme1.

1 réponse

Avatar
François Picalausa
Bonjour/soir,

Ca doit être possible en sous-classant les messages WM_MOVE et WM_SIZE
Dans les WM_MOVE de chaque fenêtre, tu enregistre les positions relatives
(dans ton exemple, un quart)
Ensuite, quand tu reçois un événement Resize (ou dans le WM_SIZE, au choix),
tu repositionne la form2.

Voici un exemple de code (SubClassing est un composant de sous classement de
ma création - mais l'important est de voir comment réaliser le sous
classement):
Dans Form1:
Option Explicit

Private Sub Form_Load()
Form2.Show
End Sub

Dans Form2:
Option Explicit

Private WithEvents SubClasser As SubClassing

Private RelXPos As Double
Private RelYPos As Double

Private Const WM_MOVE = &H3
Private Const WM_SIZE = &H5

Private Sub Form_Load()
Set SubClasser = New SubClassing
SubClasser.SubClass (Form1.hWnd)
SubClasser.SubClass (Form2.hWnd)
End Sub

Private Sub SubClasser_Message(ByVal hWnd As Long, ByVal Msg As Long, ByVal
wParam As Long, ByVal lParam As Long, SetNewValue As Boolean, NewValue As
Long)
Select Case Msg
Case WM_MOVE
RelXPos = (Form2.Left - Form1.Left) / Form1.Width
RelYPos = (Form2.Top - Form1.Top) / Form1.Height
Case WM_SIZE
If Form1.hWnd = hWnd Then
Form2.Left = Form1.Left + RelXPos * Form1.Width
Form2.Top = Form1.Top + RelYPos * Form1.Height
End If
End Select
End Sub


--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Patrice Henrio" a écrit dans le
message de news:
J'ai mis une forme2 à l'intérieur d'une forme1.
Je souhaite que lorsque je "resize" la forme1, le sommet en haut à
gauche de la forme2 se déplace de façon à ce que cette forme reste à
peu près au même endroit.
Pour être clair, si ce point se trouve au quart de la hauteur et de la
largeur de la forme1, cela continue à être le cas après un événement
"resize" de la forme1.