2016-09-16 10 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 

최종 기능

첫 번째 If 문에서

답변

0

는 대상 객체는 x 및 y 속성 (인치 참고)이있는 MouseEvent 객체이어야한다. 그런 다음 대상 도형을 떨어 뜨린 도형을 검색 할 수 있습니다.

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 항상 내 선택 된 도형의 놓기 위치에서 몇 인치 조금 떨어져있는 것 같습니다. 내가 수행하여 좌표를 추출 할 때 ActiveWindow.Selection (1) 사용하여 선택한 셰이프를 얻으려고 : Selectedshp.Cells ("PinX"). ResultIU 모양의 원래 드롭 위치에서 약간 오프셋 된 값을 제공하는 것 같습니다. 내가 떨어 뜨린 모양의 정확한 좌표를 얻을 수없는 것 같습니다. – NiTuRen

+0

스냅을 사용하면 실제 마우스 위치에서 떨어 뜨린 모양의 최종 위치가 변경되고이 효과는 확대/축소 레벨 이상으로 확대되거나 더 분명해질 것입니다. – JohnGoldsmith