Partager via


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.