2016-09-16 12 views
0

このガイドでは、https://msdn.microsoft.com/en-us/library/office/ff767482.aspxでは、図形をドラッグアンドドロップするとイベントトリガを取得できます。しかし、問題は、このイベントトリガーを受け取ったときに形状の位置がドロップ位置に更新されないということです。私の質問は、Visioで他の図形とシェイプのオーバーラップチェックを行うためにドロップした後、シェイプの更新された位置を取得する方法です。あなたの最初のIf声明で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

、対象のオブジェクトは、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

関連する問題