MouseEvent.DragState プロパティ (Visio)
マウスの動作が図形のドラッグ アンド ドロップに関連する場合、そのマウス動作の状態に関する情報を返します。 読み取り専用です。
構文
式。 DragState
式MouseEvent オブジェクトを返す式。
戻り値
Long
注釈
DragState プロパティは、MouseMove イベントを拡張したもので、一連のドラッグ アンド ドロップ操作中のマウスの動作に関する詳細情報を返します。 DragState プロパティを EventList.AddAdvise メソッドと組み合わせて使用して、ドラッグ アンド ドロップ操作が開始されているか、マウスがドロップ ターゲット ウィンドウに入っているか、ウィンドウの上を移動するのか、ターゲット ウィンドウ内のオブジェクトを削除するのか、またはウィンドウから離れているかを判断します。
注:
Event.SetFilterActions メソッドを使用して、リッスンするドラッグステート拡張機能を正確に指定できます。
イベント通知を処理するには、IVisEventProc インターフェイスの VisEventProc メソッドを実装するクラス モジュールを作成し、AddAdvise メソッドに引数として渡すこのクラスのインスタンスを作成します。 VisEventProc 関数の pSubjectObj パラメーターの DragState プロパティの値を取得します。
ユーザーが不適切なターゲット ウィンドウにオブジェクトをドロップしようとしているというイベント通知を受け取った場合など、ドラッグ アンド ドロップ アクションを取り消すには、いつでも VisEventProc = True を返すことができます。
このトピックに付随する例では、ドラッグ状態情報を取得する方法を示すサンプル コードを示します。
次の表に、DragState プロパティによって返される可能性がある値を示します。このプロパティは、Microsoft Visio タイプ ライブラリで宣言されている VisMouseMoveDragStates 列挙で宣言されます。
定数 | 値 | 説明 |
---|---|---|
visMouseMoveDragStatesBegin | 1 | ユーザーはマウスでオブジェクトをドラッグし始めています。 |
visMouseMoveDragStatesDrop | 5 | ユーザーは、ドロップ先のウィンドウにオブジェクトをドラッグ アンド ドロップしました。 |
visMouseMoveDragStatesEnter | 2 | ユーザーはマウスでオブジェクトをドロップ先ウィンドウにドラッグしています。 |
visMouseMoveDragStatesLeave | 4 | ユーザーがドロップターゲット ウィンドウからマウスを移動しています。 |
visMouseMoveDragStatesNone | 0 | マウスの動作がないか、ドラッグ動作以外のマウスの動作があります。 |
visMouseMoveDragStatesOver | 3 | ユーザーはドラッグしたオブジェクトをドロップ先ウィンドウ内でマウスで移動しています。 |
DragState プロパティが visMouseMoveDragStatesBegin を返すと、ドラッグ アンド ドロップ アクションが開始されます。 DragState プロパティは、ドラッグ アンド ドロップ アクションごとに visMouseMoveDragStatesBegin を 1 回だけ返します。 この時点で、ドラッグ アンド ドロップ アクションを完全に取り消すことができます。その場合、Visio はターゲット ウィンドウに対して追加の MouseMove イベントを発生しません。
DragState プロパティが visMouseMoveDragStatesEnter を返すと、エンド ユーザーはオブジェクトをドロップターゲット ウィンドウにドラッグします。 このイベントは、ドロップ先のウィンドウごとに 1 度発生します。 この時点で、その特定のドロップ ターゲット ウィンドウのドラッグ アンド ドロップ アクションを取り消すことができます。
DragState プロパティが visMouseMoveDragStatesOver を返したとき、ユーザーは、ドロップ先のウィンドウの上にオブジェクトをドラッグしています。 コードで指定されているように、ウィンドウの種類またはウィンドウ内の x,y 範囲に基づいて、ドラッグ アクションを取り消すことができます。 ドロップ ターゲット ウィンドウでドラッグ アクションを取り消した場合、エンド ユーザーはドラッグ アンド ドロップ アクションを完了できなくなります。
DragState プロパティが visMouseMoveDragStatesDrop を返すと、ドロップ ターゲット ウィンドウはドロップを受け取ります。 ドロップ動作を取り消して、ドロップが実行されないようにすることができます。 これが発生し、ドロップ ターゲット ウィンドウ上のドラッグ アクションも取り消さない場合、エンド ユーザーは、ドロップ アクションが禁止されていることを示す視覚的なフィードバックを受け取りません。
DragState プロパティが visMouseMoveDragStatesLeave を返したとき、エンド ユーザーはドロップ先のウィンドウの外にマウスを移動しています。 この時点でこの操作を取り消す方法はありませんが、論理的な理由もありません。
例
この例では、MouseEvent オブジェクトによって発生するイベントを処理する IVisEventProc インターフェイスを実装するクラス モジュールを作成する方法を示します。 モジュールは、発生したイベントが MouseMove イベントであるかどうかを判断するために Select Case ブロックを使用する関数 VisEventProc で構成されます。 その場合、コードは If..を使用します。Else ブロックと DragState プロパティを使用して、発生した特定の MouseMove イベント拡張機能を決定します。
MouseMove 以外のイベントは、既定のケース (Case Else) の分類に入ります。 どちらの場合も、Case ブロックは、発生したイベントの名前とイベント コードを含む文字列 ( strMessage ) を作成します。これには、MouseEvent.X プロパティと MouseEvent.Y プロパティの値から派生した、ドラッグ状態の拡張機能と、イベントが発生した場所の x 値と y 値が含まれます。 最後に、関数はこのメッセージを [イミディエイト] ウィンドウに表示します。
このサンプル コードを VBA または Visual Basic の新しいクラス モジュールにコピーし、モジュール clsEventSink という名前を付けます。 その後に続くイベント シンク モジュールを使用して、clsEventSink クラスのインスタンスを作成し、イベント発生の通知をそのクラス インスタンスに送信する MouseMove イベントの Event オブジェクトを作成します。
Implements Visio.IVisEventProc
'Declare visEvtAdd as a 2-byte value
'to avoid a run-time overflow error
Private Const visEvtAdd% = &H8000
Private Function IVisEventProc_VisEventProc( _
ByVal nEventCode As Integer, _
ByVal pSourceObj As Object, _
ByVal nEventID As Long, _
ByVal nEventSeqNum As Long, _
ByVal pSubjectObj As Object, _
ByVal vMoreInfo As Variant) As Variant
Dim strMessage As String
'Find out which event and event extension fired
Select Case nEventCode
Case visEvtCodeMouseMove
Dim strInfo As String
If (pSubjectObj.DragState = visMouseMoveDragStatesOver) Then
strMessage = "MouseMove - dragOver (" + Str(pSubjectObj.x) + "," + Str(pSubjectObj.y) + ")"
ElseIf (pSubjectObj.DragState = visMouseMoveDragStatesBegin) Then
strMessage = "MouseMove - dragBegin (" + Str(pSubjectObj.x) + "," + Str(pSubjectObj.y) + ")"
If (pSubjectObj.Window.Index <> 1) Then
IVisEventProc_VisEventProc = True ' cancel for all windows except first one
End If
ElseIf (pSubjectObj.DragState = visMouseMoveDragStatesLeave) Then
strMessage = "MouseMove - dragLeave"
ElseIf (pSubjectObj.DragState = visMouseMoveDragStatesEnter) Then
strMessage = "MouseMove - dragEnter*******************************************"
ElseIf (pSubjectObj.DragState = visMouseMoveDragStatesDrop) Then
strMessage = "MouseMove - dragDrop"
End If
Case Else
strMessage = "Other (" & nEventCode & ")"
End Select
'Display the event name and the event code
If (Len(strMessage)) Then
Debug.Print strMessage
End If
End Function
次の VBA モジュールは、AddAdvise メソッドを使用してイベントをシンクする方法を示します。 このモジュールには、2 つのパブリック プロシージャが含まれています。
CreateEventObjects プロシージャは、AddAdvise メソッドに渡され、イベントの通知を受け取る clsEventSink という名前のシンク オブジェクト (イベント処理) クラスのインスタンスを作成します。 さらに、プロシージャは、Application オブジェクトによってソース化された MouseMove イベントの発生の通知をシンク オブジェクトに送信する単一の Event オブジェクトを作成します。
Initialize プロシージャは、CreateEventObjects プロシージャを呼び出してイベントのリッスンを開始します。
clsEventSink クラスは、IVisEventProc インターフェイスを実装します。
Public Sub Initialize()
CreateEventObjects
End Sub
Option Explicit
Private mEventSink As clsEventSink
Dim vsoApplicationEvents As Visio.EventList
Dim vsoMouseMoveEvent As Visio.Event
'Declare visEvtAdd as a 2-byte value
'to avoid a run-time overflow error
Private Const visEvtAdd% = &H8000
Public Sub CreateEventObjects()
'Create an instance of the clsEventSink class
'to pass to the AddAdvise method.
Set mEventSink = New clsEventSink
'Get the EventList collection of the current instance of the Visio Application object
Set vsoApplicationEvents = Application.EventList
'Add an Event object that sends notifications of the MouseMove event.
Set vsoMouseMoveEvent = vsoApplicationEvents.AddAdvise(visEvtCodeMouseMove, mEventSink, "", "Mouse moved...")
End Sub
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。