Freigeben über


MouseEvent.DragState-Eigenschaft (Visio)

Gibt Informationen zum Status der Mausbewegung in Bezug auf Drag & Drop-Vorgänge eines Shapes zurück. Schreibgeschützt.

Syntax

Ausdruck. DragState

Ausdruck Ein Ausdruck, der ein MouseEvent-Objekt zurückgibt.

Rückgabewert

Long

Hinweise

Die DragState-Eigenschaft erweitert das MouseMove-Ereignis , indem während eines Drag-and-Drop-Vorgangs ausführliche Informationen zum Zustand von Mausbewegungen und -aktionen zurückgegeben werden. Verwenden Sie die DragState-Eigenschaft in Verbindung mit der EventList.AddAdvise-Methode , um zu bestimmen, ob ein Drag-and-Drop-Vorgang beginnt oder ob die Maus in ein Drop-Target-Fenster wechselt, sich über das Fenster bewegt, ein Objekt im Zielfenster abgibt oder das Fenster verlässt.

Hinweis

Mithilfe der Event.SetFilterActions-Methode können Sie genau angeben, an welchen Ziehzuständen Sie lauschen möchten.

Um Ereignisbenachrichtigungen zu verarbeiten, erstellen Sie ein Klassenmodul, das die VisEventProc-Methode der IVisEventProc-Schnittstelle implementiert, und erstellen Sie dann eine instance dieser Klasse, die als Argument an die AddAdvise-Methode übergeben werden soll. Rufen Sie den Wert der DragState-Eigenschaft des pSubjectObj-Parameters der VisEventProc-Funktion ab.

Sie können VisEventProc = True jederzeit zurückgeben, um die Drag-and-Drop-Aktion abzubrechen, z. B. wenn Sie eine Ereignisbenachrichtigung erhalten, dass der Benutzer versucht, ein Objekt in einem ungeeigneten Zielfenster zu löschen.

Das Beispiel zu diesem Thema enthält Beispielcode, der zeigt, wie Informationen zum Ziehzustand abgerufen werden.

Mögliche von der DragState-Eigenschaft zurückgegebene Werte werden in der folgenden Tabelle aufgeführt und sind in der VisMouseMoveDragStates-Enumeration deklariert, die wiederum in der Microsoft Visio-Typbibliothek deklariert ist.

Konstante Wert Beschreibung
visMouseMoveDragStatesBegin 1 Benutzer beginnt, ein Objekt mit der Maus zu ziehen.
visMouseMoveDragStatesDrop 5 Benutzer hat das gezogene Objekt im Drop-Zielfenster abgelegt.
visMouseMoveDragStatesEnter 2 Benutzer zieht ein Objekt mit der Maus in das Drop-Zielfenster.
visMouseMoveDragStatesLeave 4 Der Benutzer bewegt die Maus aus dem Drop-Target-Fenster.
visMouseMoveDragStatesNone 0 Entweder keine Mausbewegung oder eine Mausbewegung, die keinen Ziehvorgang darstellt.
visMouseMoveDragStatesOver 3 Benutzer bewegt das gezogene Objekt mit der Maus in das Drop-Zielfenster.

Wenn die DragState-EigenschaftvisMouseMoveDragStatesBegin zurückgibt, beginnt eine Drag-and-Drop-Aktion. Die DragState-Eigenschaft gibt visMouseMoveDragStatesBegin nur einmal für jede Drag-and-Drop-Aktion zurück. An diesem Punkt können Sie die Drag-and-Drop-Aktion vollständig abbrechen. In diesem Fall löst Visio keine zusätzlichen MouseMove-Ereignisse für Zielfenster aus.

Wenn die DragState-EigenschaftvisMouseMoveDragStatesEnter zurückgibt, zieht ein Endbenutzer ein Objekt in ein Drop-Target-Fenster. Dieses Ereignis wird nur einmal pro Drop-Zielfenster ausgelöst. An diesem Punkt können Sie die Drag-and-Drop-Aktion für dieses bestimmte Ablagezielfenster abbrechen.

Wenn die DragState-Eigenschaft visMouseMoveDragStatesOver zurückgibt, wird dadurch angegeben, dass ein Objekt vom Benutzer über ein Drop-Zielfenster gezogen wird. Sie können die Ziehaktion basierend auf dem Typ des Fensters oder auf einem x,y-Bereich innerhalb eines Fensters abbrechen, wie im Code angegeben. Das Abbrechen einer Ziehaktion über das Ablagezielfenster verhindert, dass der Endbenutzer die Drag-and-Drop-Aktion abschließen kann.

Wenn die DragState-EigenschaftvisMouseMoveDragStatesDrop zurückgibt, empfängt das Dropzielfenster einen Drop. Sie können die Ablegeaktion abbrechen, damit das Element nicht abgelegt wird. Wenn dies der Fall ist und Sie nicht auch die Ziehaktion über das Ablagezielfenster abbrechen, erhält der Endbenutzer kein visuelles Feedback, um anzugeben, dass die Ablageaktion verhindert wurde.

Wenn die DragState-EigenschaftvisMouseMoveDragStatesLeave zurückgibt, bewegt der Endbenutzer die Maus aus dem Drop-Zielfenster. Es gibt keine Möglichkeit, diesen Vorgang an diesem Punkt abzubrechen, aber es gibt auch keinen logischen Grund dafür.

Beispiel

In diesem Beispiel wird gezeigt, wie Sie ein Klassenmodul erstellen, das die IVisEventProc-Schnittstelle zum Verarbeiten von Ereignissen implementiert, die vom MouseEvent-Objekt ausgelöst werden. Das Modul besteht aus der Funktion VisEventProc, die mithilfe einer Select Case-Sperre ermittelt, ob das ausgelöste Ereignis ein MouseMove-Ereignis war. Ist dies der Fall, wird durch eine If...Else-Sperre im Code und durch die DragState-Eigenschaft ermittelt, welche MouseMove-Ereigniserweiterung ausgelöst wurde.

Andere Ereignisse als MouseMove fallen unter den Standardfall (Case Else). In beiden Fällen erstellt der Case-Block eine Zeichenfolge ( strMessage ), die den Namen und den Ereigniscode des ausgelösten Ereignisses enthält, einschließlich der Ziehzustandserweiterung und der x- und y-Werte des Speicherorts, an dem das Ereignis ausgelöst wurde, abgeleitet von den Werten der MouseEvent.X - und MouseEvent.Y-Eigenschaften . Schließlich zeigt die Funktion die Meldung im Direktfenster an.

Kopieren Sie diesen Beispielcode in ein neues Klassenmodul in VBA oder Visual Basic, und nennen Sie das Modul clsEventSink. Anschließend können Sie das folgende Ereignissenkenmodul verwenden, um eine instance der clsEventSink-Klasse und ein Event-Objekt für das MouseMove-Ereignis zu erstellen, das Benachrichtigungen über Ereignisauslösungen an die Klasse instance sendet.

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

Das folgende VBA-Modul veranschaulicht, wie Sie die AddAdvise-Methode zum Auffangen von Ereignissen verwenden. Das Modul enthält zwei öffentliche Prozeduren.

Die CreateEventObjects-Prozedur erstellt eine instance einer Senkenobjektklasse (Ereignisbehandlung) namens clsEventSink, die an die AddAdvise-Methode übergeben wird und Benachrichtigungen über Ereignisse empfängt. Darüber hinaus erstellt die Prozedur ein einzelnes Event-Objekt , um Benachrichtigungen über das Auslösen des MouseMove-Ereignisses , das vom Application-Objekt stammt, an das Senkenobjekt zu senden.

Die Initialize-Prozedur ruft die CreateEventObjects-Prozedur auf, um mit der Ereignisüberwachung zu beginnen.

Die clsEventSink-Klasse implementiert die IVisEventProc-Schnittstelle.

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

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.