Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
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.