一緒に移動するフォーム


anonymous  2003-08-01 19:45:59  No: 78851

二つのフォームを隣接させて、ひとつのフォームのように動くプログラムを作成しようと
しているのですが、いろいろやったんですがうまくいきません。
どなたかいい方法をお知りの方、是非ご教示ください。


毘沙門  2003-08-02 02:37:01  No: 78852

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

いかがでしょう?


anonymous  2003-08-02 03:46:28  No: 78853

ありがとうございます。参考にさせてもらいます。
あと、WM_MOVE を使ったやり方があるそうなのですが、
それを使ったやり方をもし、お知りでしたらそちらも教えていただけませんでしょうか?よろしくお願いします。


たかみちえ  URL  2003-08-02 03:57:42  No: 78854

要はまったく同じです。
WM_MOVEはウィンドウの移動時に発生するので、そこで毘沙門さんがタイマーでしたことと同じことをします。

  でも、WM_MOVEを受け取るには、サブクラス化しなければいけないので、お勧めはできません。

  もうサブクラス化しているというのならば、
WM_MOVEより、WM_WINDOWPOSCHANGINGやWM_WINDOWPOSCHANGED,WM_SETWINDOWPOSなどを使ったほうが滑らかに動かせると思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加