二つのフォームを隣接させて、ひとつのフォームのように動くプログラムを作成しようと
しているのですが、いろいろやったんですがうまくいきません。
どなたかいい方法をお知りの方、是非ご教示ください。
Form1の移動に合わせてForm2が移動する例を作ってみました。
Form1にはTimerを貼り付けてください。
'=== Form1 ===
Option Explicit
Private mX As Long
Private mY As Long
Event MoveWindow(W As Long, H As Long, X As Long, Y As Long)
Private Sub Form_Load()
Timer1.Interval = 200
Timer1.Enabled = True
Form2.Show
End Sub
Private Sub Timer1_Timer()
If (mX <> Me.Left Or mY <> Me.Top) Then
mX = Me.Left
mY = Me.Top
RaiseEvent MoveWindow(Me.Width, Me.Height, mX, mY)
End If
End Sub
'=== Form2 ===
Option Explicit
Private WithEvents PForm As Form1
Private Sub Form_Load()
Set PForm = Form1
End Sub
Private Sub PForm_MoveWindow(W As Long, H As Long, X As Long, Y As Long)
Me.Move X + W, Y
End Sub
いかがでしょう?
ありがとうございます。参考にさせてもらいます。
あと、WM_MOVE を使ったやり方があるそうなのですが、
それを使ったやり方をもし、お知りでしたらそちらも教えていただけませんでしょうか?よろしくお願いします。
要はまったく同じです。
WM_MOVEはウィンドウの移動時に発生するので、そこで毘沙門さんがタイマーでしたことと同じことをします。
でも、WM_MOVEを受け取るには、サブクラス化しなければいけないので、お勧めはできません。
もうサブクラス化しているというのならば、
WM_MOVEより、WM_WINDOWPOSCHANGINGやWM_WINDOWPOSCHANGED,WM_SETWINDOWPOSなどを使ったほうが滑らかに動かせると思います。
ツイート | ![]() |