Свойство MouseEvent.DragState (Visio)
Возвращает сведения о состоянии перемещения мыши, связанного с перетаскиванием фигуры. Только для чтения.
Синтаксис
выражение. DragState
Выражение Выражение, возвращающее объект MouseEvent .
Возвращаемое значение
Длинное целое
Замечания
Свойство DragState расширяет событие MouseMove , возвращая подробные сведения о состоянии перемещений мыши и действий в ходе операции перетаскивания. Используйте свойство DragState в сочетании с методом EventList.AddAdvise , чтобы определить, начинается ли операция перетаскивания или мышь входит в целевое окно, перемещается по окну, удаляет объект в целевом окне или покидает окно.
Примечание.
Вы можете точно указать, какие расширения состояний перетаскивания нужно прослушивать, используя метод Event.SetFilterActions .
Для обработки уведомлений о событиях создайте модуль класса, который реализует метод VisEventProc интерфейса IVisEventProc , а затем создайте экземпляр этого класса для передачи в качестве аргумента методу AddAdvise . Получите значение свойства DragState параметра pSubjectObj функции VisEventProc .
В любой момент вы можете вернуть VisEventProc = True , чтобы отменить действие перетаскивания, например, если вы получаете уведомление о событии о том, что пользователь пытается удалить объект в неподходящее целевое окно.
В примере, который сопровождается этим разделом, представлен пример кода, который показывает, как получить сведения о состоянии перетаскивания.
Возможные значения, возвращаемые свойством DragState , показаны в следующей таблице и объявлены в перечислении VisMouseMoveDragStates , которое объявляется в библиотеке типов Microsoft Visio.
Константа | Значение | Описание |
---|---|---|
visMouseMoveDragStatesBegin | 1 | Пользователь начинает перетаскивать объект с помощью мыши. |
visMouseMoveDragStatesDrop | 5 | Пользователь уронил перетаскиваемый объект в окне drop-target. |
visMouseMoveDragStatesEnter | 2 | Пользователь перетаскивает объект в целевое окно с помощью мыши. |
visMouseMoveDragStatesLeave | 4 | Пользователь перемещает мышь из окна раскрывающегося целевого объекта. |
visMouseMoveDragStatesNone | 0 | Ни перемещение мыши, ни перемещение мыши, которое не является действием перетаскивания. |
visMouseMoveDragStatesOver | 3 | Пользователь перемещает перетаскиваемый объект в целевое окно с помощью мыши. |
Когда свойство DragState возвращает visMouseMoveDragStatesBegin , начинается действие перетаскивания. Свойство DragState возвращает visMouseMoveDragStatesBegin только один раз для каждого действия перетаскивания. На этом этапе можно полностью отменить действие перетаскивания. В этом случае Visio не запускает никаких дополнительных событий MouseMove для каких-либо целевых окон.
Когда свойство DragState возвращает visMouseMoveDragStatesEnter, пользователь перетаскивает объект в целевое окно. Это событие запускается один раз в каждом целевом окне. На этом этапе можно отменить действие перетаскивания для этого конкретного целевого окна.
Когда свойство DragState возвращает visMouseMoveDragStatesOver, пользователь перетаскивает объект через целевое окно. Действие перетаскивания можно отменить в зависимости от типа окна или диапазона x,y в окне, как указано в коде. Отмена действия перетаскивания через целевое окно не позволяет конечному пользователю выполнить действие перетаскивания.
Когда свойство DragState возвращает visMouseMoveDragStatesDrop, окно drop-target получает удаление. Действие удаления можно отменить, тем самым предотвратив удаление. Если это происходит и вы не отменяете действие перетаскивания в целевом окне, пользователь не получает никаких визуальных отзывов, указывающих на то, что действие удаления было запрещено.
Когда свойство DragState возвращает visMouseMoveDragStatesLeave, пользователь перемещает мышь из окна раскрывающегося целевого объекта. На этом этапе невозможно отменить эту операцию, но для этого также не будет логических причин.
Пример
В этом примере показано, как создать модуль класса, реализующий интерфейс IVisEventProc для обработки событий, инициируемых объектом MouseEvent . Модуль состоит из функции VisEventProc, которая использует блок Select Case для определения того, было ли событие MouseMove событием MouseMove . Если это так, в коде используется значение If... В противном случае заблокируйте и свойство DragState , чтобы определить конкретное расширение события MouseMove , которое сработало.
События, отличные от MouseMove, относятся к регистру по умолчанию (Case Else). В обоих случаях блок Case создает строку ( strMessage ), которая содержит имя и код события, которое сработало, включая расширение состояния перетаскивания и значения x- и y- расположения, в котором произошло событие, производные от значений свойств MouseEvent.X и MouseEvent.Y . Наконец, функция отображает сообщение в окне Интерпретация.
Скопируйте этот пример кода в новый модуль класса в VBA или Visual Basic, назвав модуль clsEventSink. Затем можно использовать следующий модуль приемника событий, чтобы создать экземпляр класса clsEventSink и объект Event для события MouseMove , который отправляет уведомления о срабатывании события экземпляру класса.
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 для приемника событий. Модуль содержит две открытые процедуры.
Процедура CreateEventObjects создает экземпляр класса sink-object (обработка событий) с именем clsEventSink , который передается в метод AddAdvise и получает уведомления о событиях. Кроме того, процедура создает один объект Event для отправки уведомлений о срабатывании события MouseMove , исходного объектом Application , в объект приемника.
Процедура 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 и обратная связь.