2016-09-16 2 views
0

Dans ce guide https://msdn.microsoft.com/en-us/library/office/ff767482.aspx, je peux déclencher un événement lorsque je fais glisser et déposez mes formes. Mais le problème est que la position de la forme n'est pas mise à jour à la position de chute lorsque j'ai reçu ce déclencheur d'événement. Ma question est comment puis-je obtenir une position mise à jour de la forme après que je l'ai laissé tomber pour effectuer un contrôle de chevauchement sur la forme avec d'autres formes dans Visio?Visio dragDrop position de la position non mise à jour

Dim strMessage As String 

'Find out which event and event extension fired 
Select Case nEventCode 
    Case visEvtCodeMouseMove 
     Dim strInfo As String 
     If (pSubjectObj.DragState = visMouseMoveDragStatesDrop) Then 
      strMessage = "MouseMove - dragDrop" 

      'Shape position is not updated to drop position here 

     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

Répondre

0

Dans votre première déclaration If, l'objet sujet doit être un objet MouseEvent qui a des propriétés x et y (note en pouces). Vous pouvez ensuite les utiliser pour rechercher les formes sur lesquelles la forme cible a été supprimée:

Dim evtMouse As Visio.MouseEvent 
Dim selSearchShapes As Visio.Selection 
... 
Set evtMouse = pSubjectObj 

Set selSearchShapes = evtMouse.Application.ActivePage.SpatialSearch(evtMouse.x, _ 
    evtMouse.y, _ 
    Visio.VisSpatialRelationCodes.visSpatialContainedIn, _ 
    0, _ 
    Visio.VisSpatialRelationFlags.visSpatialFrontToBack) 

Debug.Print "Spatial search found: " & selSearchShapes.Count 

If selSearchShapes.Count > 0 Then 
    Debug.Print "Spatial search - top shape: " & selSearchShapes(1).NameID 
End If 
+0

Salut merci pour la réponse. Le evtMouse.x et evtMouse .y semble toujours être un peu à quelques centimètres de la position de goutte de ma forme sélectionnée.J'ai essayé d'obtenir la forme sélectionnée en utilisant ActiveWindow.Selection (1), quand j'extraire les coordonnées en faisant: Selectedshp.Cells ("PinX"). ResultIU il semble me donner une valeur qui est un peu décalée par rapport à la position initiale de la forme. Je n'arrive pas à obtenir la coordonnée exacte de la forme après l'avoir lâchée. – NiTuRen

+0

Vous remarquerez peut-être que l'alignement modifie la position finale de la forme abandonnée par rapport à la position réelle de la souris et que cet effet sera amplifié ou plus évidente à mesure que le niveau de zoom s'éloignera. – JohnGoldsmith