Propriété MouseEvent.DragState (Visio)
Renvoie des informations sur l'état du déplacement de la souris relatif au glisser-déplacer d'une forme. En lecture seule.
Syntaxe
expression. DragState
Expression Expression qui renvoie un objet MouseEvent .
Valeur renvoyée
Entier long
Remarques
La propriété DragState étend l’événement MouseMove en renvoyant des informations détaillées sur l’état des déplacements et des actions de souris pendant une opération de glisser-déplacer. Utilisez la propriété DragState conjointement avec la méthode EventList.AddAdvise pour déterminer si une opération glisser-déplacer commence ou si la souris entre dans une fenêtre cible de déplacement, se déplace au-dessus de la fenêtre, dépose un objet dans la fenêtre cible ou quitte la fenêtre.
Remarque
Vous pouvez spécifier exactement les extensions d’états de glissement que vous souhaitez écouter à l’aide de la méthode Event.SetFilterActions .
Pour gérer les notifications d’événements, créez un module de classe qui implémente la méthode VisEventProc de l’interface IVisEventProc, puis créez une instance de cette classe à passer en tant qu’argument à la méthode AddAdvise . Obtient la valeur de la propriété DragState du paramètre pSubjectObj de la fonction VisEventProc .
À tout moment, vous pouvez renvoyer VisEventProc = True pour annuler l’action glisser-déplacer, par exemple si vous recevez une notification d’événement indiquant que l’utilisateur tente de déposer un objet dans une fenêtre cible inappropriée.
L’exemple qui accompagne cette rubrique fournit un exemple de code qui montre comment obtenir des informations sur l’état de glissement.
Les valeurs possibles renvoyées par la propriété DragState sont incluses dans le tableau suivant et déclarées dans l’énumération VisMouseMoveDragStates, déclarée dans la bibliothèque de types de Microsoft Visio.
Constante | Valeur | Description |
---|---|---|
visMouseMoveDragStatesBegin | 1 | L'utilisateur commence à déplacer un objet avec la souris. |
visMouseMoveDragStatesDrop | 5 | L'utilisateur à déplacé l'objet dans la fenêtre cible. |
visMouseMoveDragStatesEnter | 2 | L'utilisateur déplace un objet vers la fenêtre cible avec la souris. |
visMouseMoveDragStatesLeave | 4 | L’utilisateur déplace la souris hors de la fenêtre de la cible de déplacement. |
visMouseMoveDragStatesNone | 0 | N'est soit pas un déplacement de souris, soit un déplacement de souris qui n'est pas une action de déplacement. |
visMouseMoveDragStatesOver | 3 | L'utilisateur déplace l'objet vers la fenêtre cible avec la souris. |
Si la propriété DragState renvoie visMouseMoveDragStatesBegin, cela signifie qu'une action de glisser-déplacer commence. La propriété DragState renvoie visMouseMoveDragStatesBegin une seule fois pour chaque action de glisser-déplacer. À ce stade, vous pouvez annuler entièrement l’action glisser-déplacer ; Dans ce cas, Visio ne déclenche aucun événement MouseMove supplémentaire pour les fenêtres cibles.
Lorsque la propriété DragState renvoie visMouseMoveDragStatesEnter, un utilisateur final fait glisser un objet dans une fenêtre de cible de déplacement. Cet événement est déclenché une fois par fenêtre cible. À ce stade, vous pouvez annuler l’action glisser-déplacer pour cette fenêtre cible de déplacement spécifique.
Si la propriété DragState renvoie visMouseMoveDragStatesOver, cela signifie que l'utilisateur glisse et déplace un objet sur une fenêtre cible. Vous pouvez annuler l’action glisser, en fonction du type de fenêtre ou d’une plage x,y dans une fenêtre, comme spécifié dans votre code. L’annulation d’une action de glissement sur la fenêtre cible de déplacement empêche l’utilisateur final d’effectuer l’action glisser-déplacer.
Lorsque la propriété DragState renvoie visMouseMoveDragStatesDrop, la fenêtre drop-target reçoit un drop. Vous pouvez annuler l'action de déplacement, ce qui empêche le déplacement. Lorsque cela se produit et que vous n’annulez pas également l’action de glisser sur la fenêtre de la cible de déplacement, l’utilisateur final ne reçoit aucun retour visuel indiquant que l’action de déplacement a été empêchée.
Si la propriété DragState renvoie visMouseMoveDragStatesLeave, cela signifie que l'utilisateur final déplace la souris hors de la fenêtre cible. Il n’existe aucun moyen pour vous d’annuler cette opération à ce stade, mais il n’y aurait pas non plus de raison logique de le faire.
Exemple
Cet exemple montre comment créer un module de classe qui met en œuvre l'interface IVisEventProc pour gérer les événements déclenchés par l'objet MouseEvent. Le module consiste en une fonction VisEventProc, qui utilise un bloc Select Case pour déterminer si l'événement déclenché était du type MouseMove. Si c'est le cas, le code utilise un bloc If...Else et la propriété DragState pour déterminer l'extension de l'événement MouseMove spécifique déclenché.
Les événements autres que MouseMove tombent dans le cas par défaut (Case Else). Dans les deux cas, le bloc Case construit une chaîne ( strMessage ) qui contient le nom et le code d’événement de l’événement qui s’est déclenché, y compris l’extension d’état glisser et les valeurs x ety- de l’emplacement où l’événement s’est déclenché, dérivées des valeurs des propriétés MouseEvent.X et MouseEvent.Y . Enfin, la fonction affiche le message dans la fenêtre Exécution.
Copiez cet exemple de code dans un nouveau module de classe en VBA ou Visual Basic, en nommant le module clsEventSink. Vous pouvez ensuite utiliser le module récepteur d'événement suivant pour créer une instance de la classe clsEventSink et un objet Event pour l'événement MouseMove qui envoie des notifications de déclenchements d'événement à l'instance de la 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
Le module VBA suivant indique comment utiliser la méthode AddAdvise pour recevoir des événements. Le module contient deux procédures publiques.
La procédure CreateEventObjects crée une instance d'une classe d'objet récepteur (traitement d'événement) nommée clsEventSink transmise à la méthode AddAdvise et qui reçoit des notifications d'événement. En outre, la procédure crée un seul objet Event pour envoyer à un objet récepteur des notifications de déclenchement de l'événement MouseMove, dont l'objet Application est à l'origine.
La procédure Initialize appelle la procédure CreateEventObjects pour commencer à recevoir les événements.
La classe clsEventSink implémente l'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
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.