マウス関連の 3 つのイベントハンドラを実装すればいい。
以下の記述ではフォームに対して実装しているが、ラベルで偽のタイトルバーを実装する場合などは、そっちに実装してもいい。
まず、モジュール変数を宣言。
Private mDragging As Boolean Private mLeft As Single Private mTop As Single
ついで、イベント実装。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button And vbLeftButton Then mDragging = True mLeft = X mTop = Y End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If mDragging Then Me.Left = Me.Left + (X - mLeft) Me.Top = Me.Top + (Y - mTop) End If End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) mDragging = False End Sub
ポイントは、ドラッグ中にフォームを移動しても、これらのイベントで受け取る座標は、移動前のフォーム位置を基準にした値になっている、ということ。