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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 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
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.
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 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
"Patrice Henrio" <patrice.henrio.pasdepub@laposte.net> a écrit dans le
message de news:OroYYyHBEHA.2768@tk2msftngp13.phx.gbl
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.
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 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
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.