Compartir por


Propiedad MouseEvent.DragState (Visio)

Devuelve información sobre el estado del movimiento del mouse (ratón) asociado con la acción de arrastrar y colocar una forma. Solo lectura.

Sintaxis

expresión. DragState

Expresión Expresión que devuelve un objeto MouseEvent .

Valor devuelto

Long

Comentarios

La propiedad DragState extiende el evento MouseMove al devolver información detallada sobre el estado de los movimientos y acciones del mouse durante toda la operación de arrastrar y colocar. Utilice la propiedad DragState junto con el método EventList.AddAdvise para determinar si se está iniciando una operación de arrastrar y colocar, o si el mouse entra en una ventana de destino de colocación, se mueve sobre la ventana, quita un objeto en la ventana de destino o sale de la ventana.

Nota:

Puede especificar exactamente qué extensiones de estados de arrastre desea escuchar mediante el método Event.SetFilterActions .

Para controlar las notificaciones de eventos, cree un módulo de clase que implemente el método VisEventProc de la interfaz IVisEventProc y, a continuación, cree una instancia de esta clase para pasarla como argumento al método AddAdvise . Obtenga el valor de la propiedad DragState del parámetro pSubjectObj de la función VisEventProc .

En cualquier momento puede devolver VisEventProc = True para cancelar la acción de arrastrar y colocar, por ejemplo, si recibe una notificación de evento de que el usuario está intentando colocar un objeto en una ventana de destino inadecuada.

El ejemplo que acompaña a este tema proporciona código de ejemplo que muestra cómo obtener información de estado de arrastre.

Los valores que puede devolver la propiedad DragState se muestran en la tabla siguiente y se declaran en la enumeración VisMouseMoveDragStates, declarada en la biblioteca de tipos de Microsoft Visio.

Constante Valor Descripción
visMouseMoveDragStatesBegin 1 El usuario comienza a arrastrar un objeto con el mouse (ratón).
visMouseMoveDragStatesDrop 5 El usuario ha colocado el objeto arrastrado en la ventana de destino.
visMouseMoveDragStatesEnter 2 El usuario está arrastrando un objeto a la ventana de destino con el mouse.
visMouseMoveDragStatesLeave 4 El usuario mueve el mouse fuera de la ventana de destino de colocación.
visMouseMoveDragStatesNone 0 No es un movimiento del mouse, o es un movimiento del mouse que no es una acción de arrastrar.
visMouseMoveDragStatesOver 3 El usuario está moviendo el objeto arrastrado en la ventana de destino con el mouse.

Cuando la propiedad DragState devuelve visMouseMoveDragStatesBegin, comienza una acción de arrastrar y colocar. La propiedad DragState devuelve visMouseMoveDragStatesBegin una sola vez para cada acción de arrastrar y colocar. En este punto, puede cancelar completamente la acción de arrastrar y colocar; Si lo hace, Visio no desencadena ningún evento MouseMove adicional para ninguna ventana de destino.

Cuando la propiedad DragState devuelve visMouseMoveDragStatesEnter, un usuario final arrastra un objeto a una ventana de destino de colocación. Este evento se desencadena una vez para cada ventana de destino. En este punto, puede cancelar la acción de arrastrar y colocar para esa ventana de destino de colocación específica.

Cuando la propiedad DragState devuelve visMouseMoveDragStatesOver, el usuario está arrastrando un objeto por encima de la ventana de destino. Puede cancelar la acción de arrastre, en función del tipo de ventana o de un intervalo x,y dentro de una ventana, tal como se especifica en el código. La cancelación de una acción de arrastre sobre la ventana de destino de colocación impide que el usuario final complete la acción de arrastrar y colocar.

Cuando la propiedad DragState devuelve visMouseMoveDragStatesDrop, la ventana de destino de colocación recibe una colocación. Puede cancelar la acción de colocar y así impedir que se produzca. Cuando esto ocurre y no se cancela también la acción de arrastrar sobre la ventana de destino de colocación, el usuario final no recibe ningún comentario visual para indicar que se ha impedido la acción de colocación.

Cuando la propiedad DragState devuelve visMouseMoveDragStatesLeave, el usuario final mueve el mouse fuera de la ventana de destino de colocación. No hay ninguna manera de cancelar esta operación en este momento, pero tampoco habría ninguna razón lógica para hacerlo.

Ejemplo:

Este ejemplo muestra cómo crear un módulo de clase que implementa la interfaz IVisEventProc para controlar los eventos desencadenados por el objeto MouseEvent. El módulo se compone de la función VisEventProc, que utiliza un bloque Select Case para determinar si el evento que se desencadenó era un evento MouseMove. Si es así, el código utiliza un bloque If...Else y la propiedad DragState para determinar la extensión específica del evento MouseMove desencadenado.

Los eventos que no sean MouseMove se procesan en el bloque predeterminado (Case Else). En ambos casos, el bloque Case construye una cadena ( strMessage ) que contiene el nombre y el código de evento del evento que se ha desencadenado, incluida la extensión de estado de arrastre y los valores x - e y de la ubicación donde se ha desencadenado el evento, derivados de los valores de las propiedades MouseEvent.X y MouseEvent.Y . Por último, la función muestra el mensaje en la ventana Inmediato.

Copie este código de ejemplo en un nuevo módulo de clase de VBA o Visual Basic y asígnele el nombre clsEventSink. A continuación, podrá utilizar el siguiente módulo receptor de eventos para crear una instancia de la clase clsEventSink y un objeto Event para el evento MouseMove que envía las notificaciones del desencadenamiento de eventos a la instancia de la clase.

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

El siguiente módulo de VBA muestra cómo utilizar el método AddAdvise para recibir eventos. El módulo contiene dos procedimientos públicos.

El procedimiento CreateEventObjects crea una instancia de una clase (de control de eventos) de objetos receptores denominada clsEventSink que se pasa al método AddAdvise y que recibe las notificaciones de los eventos. Además, el procedimiento crea un único objeto Event para enviar las notificaciones del desencadenamiento del evento MouseMove originado por el objeto Application al objeto receptor.

El procedimiento Initialize llama al procedimiento CreateEventObjects para empezar a escuchar a los eventos.

La clase clsEventSink implementa la interfaz 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

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.