2017-02-15 5 views
0

メソッド「SpartialNeighbors」の情報を「パッケージ(展開)」シェイプから取得できません。Visio:1つの図形に含まれる図形を取得する方法は?

は、通常、私はこのコードを使用します

Dim s As Shape, vsoShapeOnPage As Shape 
Dim vsoReturnedSelection As Visio.Selection 

's contains the current shape 
Set vsoReturnedSelection = s.SpatialNeighbors(visSpatialContain, 0, visSpatialIncludeContainerShapes) 
     If vsoReturnedSelection.Count = 0 Then 
      'No Shapes contained 
     Else 
      For Each vsoShapeOnPage In vsoReturnedSelection 
       'Code 
      Next 
     End If 

をそして、これは(nameU =「概要」)

は、私はグループ図形可能性を知っているが、デフォルトのUMLステンシルのような形状のために完全に正常に動作しますそれは努力を増加させる。

もう1つのポイントは、「MemberOfContainers」で他の図形を分析したときに、その図形が「Package(expanded)」に含まれていることです。したがって、すべての形を通過することなく、他の方法で情報を取得することが可能でなければなりません。形状がコンテナである場合

ここでは、「パッケージ」と「インターフェース」 Extract of the diagram

答えて

1

の形状を見ることができる、それがContainerPropertiesプロパティが(つまり、nullではない)が取り込まれるのです。次にそれをインタージェクトして、メンバーシェイプIDの配列を取得できます。あなたはこのようなメンバー形状を手に入れることができます

Visio Container Shapes

このように見ているドキュメントに基づいて -

次はSDKダウンロードで見つかったいくつかのサンプルコードの少し適応バージョンです

Sub CheckMyPackageContainer() 
    'Assumes container is selected shape in active drawing window 
    Call ReportContainerShape(ActiveWindow.Selection.PrimaryItem) 
End Sub 


Sub ReportContainerShape(ByRef contShp As Visio.Shape) 
    If Not contShp Is Nothing Then 
     Dim containerProps As ContainerProperties 
     Set containerProps = contShp.ContainerProperties 
     If Not containerProps Is Nothing Then 
      Dim lngContainerMembers() As Long 
      lngContainerMembers = containerProps.GetMemberShapes(Visio.VisContainerFlags.visContainerFlagsDefault) 

      Dim hostingPage As Visio.Page 
      Set hostingPage = contShp.ContainingPage 
      For Each varMember In lngContainerMembers 
       Dim shpItem As Visio.Shape 
       Set shpItem = hostingPage.Shapes.ItemFromID(varMember) 
       Debug.Print shpItem.NameU, "Text = " & shpItem.Text 
      Next 
     End If 
    End If 
End Sub 

これは、次のような出力になります( 'InterfaceThree' は含まれていないことに注意):

Interface  Text = InterfaceOne 
Interface.30 Text = InterfaceTwo 
関連する問題