2016-09-16 91 views
0

在本指南https://msdn.microsoft.com/en-us/library/office/ff767482.aspx中,我能夠在拖放形狀時獲得事件觸發器。但問題是,當我收到此事件觸發器時,形狀位置未更新到放置位置。我的問題是,如何在刪除它之後,如何獲取形狀的更新位置,以在Visio中對其他形狀執行一些重疊檢查?Visio dragDrop形狀位置未更新

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 

端功能

回答

0

在你的第一個If聲明,主​​體對象應該是一個MouseEvent對象具有x和y屬性(注英寸)。然後,您可以使用這些來搜索目標形狀已被放置的任何形狀:

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

嗨,感謝您的回覆。 evtMouse.x和evtMouse.y似乎總是稍微偏離我選定shape的放置位置幾英寸。我嘗試使用ActiveWindow.Selection(1)獲取選定的形狀,當我通過執行來提取座標時: Selectedshp.Cells(「PinX」)。ResultIU 它似乎給了我一個稍微偏離形狀的原始放置位置的值。我放棄它後似乎無法得到形狀的確切座標。 – NiTuRen

+0

您可能會發現該捕捉會改變實際鼠標位置下降形狀的最終位置,並且該縮放級別越遠,該效果將會放大或更明顯。 – JohnGoldsmith