ドラッグモードに移行するには「自動」と「手動」の二つがあり、「自動」はコントロールを掴むと勝手にドラッグに移行してくれます。対して「手動」ではコードを記述しないと移行してくれません。
「手動」の場合、ドラッグ移行のコードをMouseDownイベントに記述するか、MouseMoveに記述するかは意見の分かれる所かと思いますがMouseDownイベントに他の処理が追加される場合の事を考えてMouseMoveイベントの方がいいのではと思います。
下記のサンプルコードは、左のテキストボックスをドラッグし、ラベルの上を通り、右のテキストボックズでドロップすると、ラベルに現在発生しているイベント+ドラッグしたテキストボックスのテキスト(Textプロパティ)+x座標+y座標+ステータス(後述)が表示されます。右のテキストボックスも現在のイベント+ドラッグしたテキストボックスのテキストが表示されます。
ステータスですが、ドラッグされたコントロールがターゲット上に来た時0、ターゲットの上を移動中の場合1、ターゲットの範囲から外れた場合2、となります。
Private SubForm_Load()
TxtDragAuto.DragMode = vbAutomatic
TxtDragManual.DragMode = vbManual'デフォルトでは「マニュアル」なので本来は必要ありません。
TxtDragAuto.DragIcon = LoadPicture(App.Path & "\Drag.ico")'プロパティに設定しておけばここでアイコンを設定しなくても構いません
TxtDragManual.DragIcon = LoadPicture(App.Path & "\Drag.ico")'プロパティに設定しておけばここでアイコンを設定しなくても構いません
End Sub
Private SubLblDragOverAuto_DragOver(SourceAs Control, XAs Single, YAs Single, StateAs Integer)
LblDragOverAuto.Caption = "[DragOver] " & Source.Text & " x = " & X & " y = " & Y & " State = " & DragOverState(State)
End Sub
Private SubLblDragOverManual_DragOver(SourceAs Control, XAs Single, YAs Single, StateAs Integer)
LblDragOverManual.Caption = "[DragOver] " & Source.Text & " x = " & X & " y = " & Y & " State = " & DragOverState(State)
End Sub
Private SubTxtDragManual_MouseMove(ButtonAs Integer, ShiftAs Integer, XAs Single, YAs Single)
IfButton = vbLeftButton Then'マウスの左ボタン押下
TxtDragManual.Drag vbBeginDrag
End If
End Sub
Private SubTxtDropAuto_DragDrop(SourceAs Control, XAs Single, YAs Single)
TxtDropAuto.Text = "[Drop] " & Source.Text
End Sub
Private SubTxtDropAuto_DragOver(SourceAs Control, XAs Single, YAs Single, StateAs Integer)
TxtDropAuto.Text = "[DragOver] " & Source.Text
End Sub
Private SubTxtDropManual_DragDrop(SourceAs Control, XAs Single, YAs Single)
TxtDropManual.Text = "[Drop] " & Source.Text
End Sub
Private SubTxtDropManual_DragOver(SourceAs Control, XAs Single, YAs Single, StateAs Integer)
TxtDropManual.Text = "[DragOver] " & Source.Text
End Sub
FunctionDragOverState(StateAs Integer)
DimstrAs String
Select CaseState
Case0: str = "In"
Case1: str = "Out"
Case2: str = "Move"
CaseElse: str = ""
End Select
DragOverState = str
End Function
DownLoad vbtips032.lzh 3KB (VB6.0)