Compartilhar via


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.