Propriedade MouseEvent.DragState (Visio)
Retorna informações sobre o estado do movimento do mouse em relação a arrastar e soltar uma forma. Somente leitura.
Sintaxe
expression. DragState
Expressão Uma expressão que retorna um objeto MouseEvent .
Valor de retorno
Long
Comentários
A propriedade DragState estende o evento MouseMove, retornando informações detalhadas sobre o estado das movimentações e ações do mouse durante toda a operação de arrastar e soltar. Use a propriedade DragState em conjunto com o método EventList.AddAdvise para determinar se uma operação de arrastar e soltar está começando ou se o mouse está entrando em uma janela de destino suspenso, movendo-se sobre a janela, soltando um objeto na janela de destino ou saindo da janela.
Observação
Você pode especificar exatamente quais extensões de estados de arrasto você deseja ouvir usando o método Event.SetFilterActions .
Para lidar com notificações de evento, crie um módulo de classe que implemente o método VisEventProc da interface IVisEventProc e crie uma instância dessa classe para passar como um argumento para o método AddAdvise . Obtenha o valor da propriedade DragState do parâmetro pSubjectObj da função VisEventProc .
A qualquer momento, você pode retornar o VisEventProc = True para cancelar a ação de arrastar e soltar, por exemplo, se você receber uma notificação de evento de que o usuário está tentando soltar um objeto em uma janela de destino inadequada.
O exemplo que acompanha este tópico fornece código de exemplo que mostra como obter informações de estado de arrastar.
Os possíveis valores retornados pela propriedade DragState são mostrados na tabela a seguir e declarados na enumeração VisMouseMoveDragStates que está declarada na biblioteca de tipos do Microsoft Visio.
Constant | Valor | Descrição |
---|---|---|
visMouseMoveDragStatesBegin | 1 | Usuário está começando a arrastar um objeto com o mouse. |
visMouseMoveDragStatesDrop | 5 | Usuário soltou um objeto arrastado na janela de destino. |
visMouseMoveDragStatesEnter | 2 | Usuário está arrastando com o mouse um objeto para a janela de destino. |
visMouseMoveDragStatesLeave | 4 | O usuário está movendo o mouse para fora da janela de destino suspenso. |
visMouseMoveDragStatesNone | 0 | Não é um movimento do mouse ou é um movimento do mouse que não é uma ação de arrastamento. |
visMouseMoveDragStatesOver | 3 | Usuário está movendo com o mouse o objeto arrastado para dentro da janela de destino. |
Quando a propriedade DragState retorna visMouseMoveDragStatesBegin, uma ação de arrastar e soltar está sendo iniciada. A propriedade DragState retorna visMouseMoveDragStatesBegin apenas uma vez para cada ação de arrastar e soltar. Neste ponto, você pode cancelar totalmente a ação de arrastar e soltar; se você fizer isso, o Visio não disparará eventos adicionais do MouseMove para quaisquer janelas de destino.
Quando a propriedade DragState retorna visMouseMoveDragStatesEnter, um usuário final está arrastando um objeto para uma janela de destino suspenso. Esse evento é disparado uma vez por janela de destino. Neste ponto, você pode cancelar a ação de arrastar e soltar para essa janela de destino suspensa específica.
Quando a propriedade DragState retorna visMouseMoveDragStatesOver, o usuário está arrastando um objeto pela janela de destino. Você pode cancelar a ação de arrastar, com base no tipo de janela ou em um intervalo x,y dentro de uma janela, conforme especificado em seu código. Cancelar uma ação de arrastar pela janela de destino suspenso impede que o usuário final conclua a ação de arrastar e soltar.
Quando a propriedade DragState retorna visMouseMoveDragStatesDrop, a janela de destino suspenso está recebendo uma queda. Você pode cancelar essa ação, impedindo que ela ocorra. Quando isso ocorre e você também não cancela a ação de arrastar pela janela de destino suspenso, o usuário final não obtém comentários visuais para indicar que a ação de interrupção foi evitada.
Quando a propriedade DragState retorna visMouseMoveDragStatesLeave, o usuário final está movendo o mouse para fora da janela de destino. Não há como cancelar essa operação neste momento, mas também não haveria nenhuma razão lógica para fazê-lo.
Exemplo
Este exemplo mostra como criar um módulo de classe que implemente a interface IVisEventProc para tratar dos eventos disparados pelo objeto MouseEvent. O módulo consiste na função VisEventProc, que usa um bloco Select Case para determinar se o evento disparado foi um evento MouseMove. Em caso positivo, o código usa um bloco If...Else e a propriedade DragState para determinar a extensão específica do evento MouseMove que foi disparado.
Os eventos diferentes de MouseMove se enquadram no caso padrão (Case Else). Em ambos os casos, o bloco Case constrói uma cadeia de caracteres ( strMessage ) que contém o nome e o código de evento do evento que foi disparado, incluindo a extensão de estado de arrastar e os valores x e y do local em que o evento foi disparado, derivado dos valores das propriedades MouseEvent.X e MouseEvent.Y . Finalmente, a função exibe a mensagem na janela Immediate.
Copie esse código de exemplo em um novo módulo de classe no VBA ou no Visual Basic, nomeando o módulo clsEventSink. Você poderá então usar o módulo evento-coletor a seguir para criar uma instância da classe clsEventSink e um objeto Event para o evento MouseMove que envia notificações de disparos de eventos para a instância de classe.
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
O seguinte módulo VBA mostra como usar o método AddAdvise para eventos coletores. O módulo contém dois procedimentos públicos.
O procedimento CreateEventObjects cria uma instância de classe de objeto coletor (manipulação de eventos) denominada clsEventSink que é passada para o método AddAdvise e recebe notificações de eventos. Além disso, o procedimento criar um único objeto Event para enviar notificações de disparo do evento MouseMove originado pelo objeto Application para o objeto coletor.
O procedimento Initialize chama o procedimento CreateEventObjects para iniciar a escuta de eventos.
A classe clsEventSink implementa a interface 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
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.