前のトピック     次のトピック

第 16 章 VISIO のDOCUMENT オブジェクト、PAGE オブジェクト、および SHAPE オブジェクトの使い方

セクション 3   Shape オブジェクトの使い方

Visio® オブジェクトを扱うときに最も重要なオブジェクトは、Shape オブジェクトです。Shape オブジェクトは、基本シェイプ、グループ、ガイドまたはガイド ポイント、リンク オブジェクトや埋め込みオブジェクトを表します。さらに、Shape オブジェクトはページ、マスタシェイプ、図面の数式も表します。Shapes コレクションは、図面ページ、グループ、またはマスタシェイプのすべての Shape オブジェクトを表します。

このセクションの内容...

Shape オブジェクトの取得

図形情報の取得

図形の作成と変更

図形のテキストの追加

図形のテキストの取得

図形のスタイルの確認と適用

個別の書式の保存

プログラムによるグループの作成

マスタシェイプの作成

Shape オブジェクトの取得

図形情報を取得するには、Shape オブジェクトへの参照を取得する必要があります。これにはまず、対象の図形を含むオブジェクトの Shapes コレクションへの参照を取得する必要があります。

 



Shape オブジェクトおよび Visio オブジェクト モデルで上位にある関連するオブジェクト

ページの Shapes コレクションを取得するには、Page オブジェクトの Shapes プロパティを取得します。マスタシェイプの Shapes コレクションを取得するには、Master オブジェクトの Shapes プロパティを取得します。Shape オブジェクトがページまたはマスタシェイプのシートやグループ化された図形を表す場合は、その Shape オブジェクトも Shapes プロパティを持っています。

コレクションのインデックスを使って、Shapes コレクションから Shape オブジェクトを取得できます。また、オブジェクト名や一意の ID を使用してオブジェクトを取得することもできます。

インデックスによる図形の取得

Shapes コレクション内の図形は、その図形の作成順に整列しています。つまり、図面ページ上で最背面にある (最初に作成された) 図形が Shapes コレクションの最初の項目になり、最前面にある (最後に作成された) 図形が最後の項目になります。ページ上の最前面の図形を取得する例を以下に示します。

shpIndex = shpsObj.Count
Set shpObj = shpsObj.Item(shpIndex)

名前または一意な ID による図形の取得

Shape オブジェクトには、図形を識別するための NameNameID、および UniqueID の 3 つ のプロパティがあります。

図形およびマスタシェイプの一意な ID の詳細については、「第 20 章 Visio ソリューションとデータの統合」を参照してください。

TOPへ

図形情報の取得

Shape オブジェクトは、基本シェイプ以外を表す可能性もあるので、図形の種類を確認する必要があります。Shape オブジェクトには図形の種類を示す Type プロパティがあります。Type プロパティで返される値は、Visio® タイプ ライブラリで定義されている以下の定数です。

マスタシェイプの作成方法によっては、マスタシェイプのインスタンスが基本シェイプの場合もあれば、グループの場合もあります。

Page オブジェクトの Shapes コレクションでは、各グループは 1 つの図形として扱われます。ただし、グループは、グループ自身の Shapes コレクションを持っています。以下の関数は、Page オブジェクトの Shapes コレクションをループ処理することによって、ページ上の図形数をカウントしています。グループ内の図形 (ただし、グループ自体は対象外) もカウント対象に含まれています。この関数は、各 Shape オブジェクトの Type プロパティを調べ、図形がグループかどうかの判別も行います。TypevisTypeGroup を返す場合、グループ内の図形の数を取得し、それを図形の合計に加えています。

Function ShapesCount (root As Object) As Integer
     'Return value
     Dim iCount As Integer
     'Shapes collection
     Dim shpsObj As Visio.Shapes
     'Shape object
     Dim shpObj As Visio.Shape

     iCount = 0
     'Assumes root.Shapes is a group or a page
     Set shpsObj = root.Shapes          
     For Each shpObj In ShpsObj
          Set shpObj = shpsObj(i)
          If shpObj.Type = visTypeGroup Then
               iCount = iCount + ShapesCount(shpObj)
          Else
               iCount = iCount + 1
          End If
     Next
     ShapesCount = iCount
End Function

TOPへ

図形の作成と変更

プログラムでは、図形の新規作成やデザインの変更など、図形に対する操作を主に行います。多くの場合、マスタシェイプを図面ページにドロップして図形を作成します。この方法の詳細については、「第 18 章 オートメーションによる作図」を参照してください。

図形の新規作成

Page オブジェクトの DrawLineDrawOval、および DrawRectangle の各メソッドを使用して、プログラムで線、楕円および四角形を作成することができます。マスタシェイプを使わずに線、楕円、四角形を作成する場合は、新規図形の選択ボックス (幅と高さを示す外寸枠) のそれぞれ対角となる 2 つの角の座標を指定します。

 



DrawLine、DrawRectangle、および DrawOval を使った図形の作成

  1. pagObj.DrawLine 1,9,3,10
  2. pagObj.DrawRectangle 1,6,3,7
  3. pagObj.DrawOval 1,3,3,4

角を指定する順番は、楕円および四角形を描く場合にはあまり重要なものではありません。しかし、線を描く際には、この順番がたいせつです。線のどちら側が始点で、どちらが終点なのかが重要な場合が多いからです。

たとえば、線の書式を設定して終点に矢印をつけたい場合や、始点を他の図形に接続したい場合があります。プログラムで線を描く場合は、最初の (X, Y) 座標が線の始点を決定し、次の (X, Y) 座標が線の終点を決定します。これは、マウスを使って図形を描いた場合と同じです。

線、楕円、四角形の他に、DrawBezierDrawNURBSDrawPolyline および DrawSpline の各メソッドを使った図形を作成することもできます。これらのメソッドの詳細については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス」([ヘルプ] メニューから [開発者用リファレンス] を選択) を参照してください。

図形の変更

プログラムで独自の図形を描画したり、既存の図形を変更することもできます。また、数式を設定し、図形のデザインや基本動作を変更することも可能です。Shape オブジェクトの Cells プロパティは、数式を持つ Cell オブジェクトを返します。

このオブジェクトを使って図形のテキストを非表示にする例を以下に示します。

Set celObj = shpObj.Cells("HideText")
celObj.Formula = "True"

数式の使い方の詳細については、「第 17 章 数式のオートメーション化」を参照してください。

図形のコピー、切り取り、削除、および複製

Shape オブジェクトの CopyCutDelete、および Duplicate の各メソッドを使用すると、図形のコピー、切り取り、削除、複製を行うことができます。これらのメソッドは、Visio ユーザー インターフェースにある対応するメニュー コマンドと同じ処理を実行します。対応する図形が図面ウィンドウで選択されているかどうかにかかわらず、これらのメソッドを任意の Shape オブジェクトに対して使用できます。

ページ上の特定の位置に図形を複製するには、Page オブジェクトの Drop メソッドを使用します。引数として、複製元の図形への参照と、ドロップする図形の回転の中心を示す座標 (通常は図形の Pin と同じ) への参照を指定します。例を以下に示します。

Set shpObj = pagObj.Shapes("Sheet.1")
pagObj.Drop shpObj,1,2

クリップボードから図形を貼り付けるには、Page オブジェクトの Paste メソッドを使用します。クリップボードからの貼り付けの詳細については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス」の「Paste メソッド」を参照してください。

TOPへ

図形へのテキストの追加

図形のテキストを、マスタシェイプの一部としてではなく、プログラムで設定する場合が多くあります。Shape オブジェクトの Text プロパティに文字列を設定することにより、図形にテキストを追加したり、既存のテキストを変更したりできます。例を以下に示します。

shpObj.Text = "星"

テキストに引用符を含めるには、2 つの引用符文字 ("") で文字列を囲みます。例を以下に示します。

shpObj.Text = """現在 xyz 社と取り引きがありますか ?"""

テキストの改行位置を制御するには、Microsoft Visual Basic の Chr$ 関数で文字列に ASCII 改行文字を含めます。例を以下に示します。

shpObj.Text = "きらきら," & Chr$(10) & "光る" & Chr$(10) & "夜空の星"

 



Shape オブジェクトの Text プロパティを設定して、対応する図形にテキストを追加します

図形のテキストの一部を編集する場合は、図形の Characters プロパティを取得します。このプロパティは、Characters オブジェクトを返します。Characters オブジェクトの Begin プロパティおよび End プロパティを設定して、変更するテキストの開始位置と終了位置を指定します。

図形のテキストはテキスト ブロックにあり、図形に対して相対的な独自の座標系に配置されます。図形の [テキスト情報] セクションに数式を設定することにより、図形のテキスト ブロックのサイズおよび位置を変更できます。数式の使い方の詳細については、「第 17 章 数式のオートメーション化」を参照してください。Visio での図形のテキスト ブロックの変更およびテキストの基本動作の制御については、「第 9 章 テキストの動作の設計」を参照してください。

TOPへ

図形のテキストの取得

Shape オブジェクトの Text プロパティは、図形に表示されているテキストを含む文字列を返します。図形のテキストに、日付、時間、またはカスタム数式などのフィールドが含まれている場合は、Text プロパティが返す文字列にはエスケープ文字 (16 進数の 1E、10 進数の 30 など) が含まれます。図面ウィンドウに表示される文字列がそのまま返されるわけではありません。

図面ウィンドウに表示されているテキストと同じように、フィールドを持つ図形のテキストのすべての文字列を取得するには、図形の Characters プロパティを取得し、結果として返される Characters オブジェクトの Text プロパティを取得します。図形のテキストのサブセット、つまり範囲を指定してテキストの一部を取得するには、Characters オブジェクトの Begin プロパティおよび End プロパティを設定します。

図形のテキストのフィールドは、図形の [テキスト フィールド] セクションに表示される数式の結果が評価されたものです。Characters オブジェクトの FieldFormula プロパティおよび関連するプロパティで、図形のテキストのフィールドを制御できます。


Visio 2000 より前のバージョンでは、Text プロパティが返す文字列には、エスケープ文字で始まる 4 バイトのフィールド コードが含まれていました。それに続く 3 バイトに、フィールドの FieldCategory、FieldCode、および FieldFormat プロパティの値が含まれていました。Visio 2000 では、Text プロパティに格納されるエスケープ文字は 1 文字だけになり、FieldCategory、FieldCode、 および FieldFormat プロパティは 図形の [テキスト フィールド] セクションのFields.UICat[i]、Fields.UICod[i]、およびFields.UIFmt[i] の各セルに格納されます(これらのセルはシェイプ シート(ShapeSheet®) セクションには沸されません)。フィールド コード定数は、Visio タイプ ライブラリの visFieldCodes で定義されています。


図形内部に表示されるテキスト以外に、図形の別の部分にテキストが含まれる場合もあります。

TOPへ

図形のスタイルの確認と適用

Shape オブジェクトには、図形に適用するテキスト、線、および塗りつぶしのスタイルを示すプロパティが含まれています。

これらのプロパティを取得して、図形のテキスト、線、または塗りつぶしのスタイルを確認できます。また、これらのプロパティを設定して、図形にスタイルを適用できます。次の例では、四角形を描き、2 つのスタイルを適用しています。

Sub ApplySyles()
     Dim pagObj As Visio.Page
     Dim shpObj As Visio.Shape
     Set pagObj = ActivePage
     Set shpObj = pagObj.DrawRectangle(5, 4, 3, 2)
     shpObj.FillStyle = "Visio 20 Face3"
     

shpObj.LineStyle = "Visio 10 Face2"
End Sub

Style プロパティを設定して、複数の属性を持つスタイルを図形に適用することもできます。ただし、図形の Style プロパティを取得した場合、このプロパティは図形の塗りつぶしのスタイルを返します。これは、単一のプロパティは複数のオブジェクトを返すことができないからです。

TOPへ

個別の書式の保護

図形には、テキスト、線、または塗りつぶしのスタイルの他、プログラムまたはユーザーによる特定の書式属性を適用できます。このような書式を、"個別の書式" と呼びます。個別の書式を保護していない場合に、後でその図形にスタイルを適用すると、新しいスタイルで個別の書式が上書きされます。

プログラムによるスタイル適用時に個別の書式を保護するには、FillStyleLineStyle、または TextStyle の代わりに以下のプロパティのいずれかを使用します。

これらのプロパティは、[スタイル] ダイアログ ボックスの [個別の書式を保持する] チェック ボックスと対応しています。

TOPへ

プログラムによるグループの作成

グループとは、複数の図形で構成された図形のことです。プログラムでグループを作成するには、Window オブジェクトまたは Selection オブジェクトの Group メソッドを使用します。次のステートメントは、図面ウィンドウで選択されている複数の図形でグループを作成する例です。

winObj.Group

 



Group メソッドは、選択されている複数の図形でグループを作成します。

図形をグループに追加するには、そのグループを表す Shape オブジェクトの Drop メソッドを使用します。引数として、追加したい図形への参照と、グループ内でその図形を配置する場所も指定します。例を以下に示します。

grpObj.Drop shpObj, 0.375, 0.125

 



グループの Drop メソッドを使用して、図形をそのグループに追加します。

  1. 0,0
  2. 0.375, 0.125
  3. grpObj
  4. shpObj
  5. grpObj after grpObj.Drop

座標 (0.375, 0.125) は、グループのローカル座標を表しています。ドロップされた図形が Master オブジェクトである場合は、マスタシェイプの Pin をその座標に配置します。ドロップされた図形が Shape オブジェクトである場合は、図形の境界ボックスをその座標に配置します。

図形の [グループのプロパティ] セクションに数式を設定して、グループの基本動作を制御できます。数式の使い方の詳細については、「第 17 章 数式のオートメーション化」を参照してください。

TOPへ

マスタシェイプの作成

プログラムによりマスタシェイプを作成するには、図面ページからファイル (ステンシルの場合が多い) に図形をドロップします。これは、マウスを使ってマスタシェイプを作成する場合の操作と同じです。ファイルの Drop メソッドに、マスタシェイプとして作成する Shape オブジェクトへの参照を渡します。ステンシルに Shape オブジェクトをドロップするには、まずステンシルをオリジナルとして開く必要があります。テンプレート (.vst) ファイルで開かれたステンシルは読み取り専用の場合が多いので注意が必要です。ステンシルをオリジナルとして開くには、Open メソッドを使用します。例を以下に示します。

Dim stnObj As Visio.Document
Dim shpObj As Visio.Shape
Set stnObj = Documents.Open("基本シェイプ.vss")
stnObj.Drop shpObj, 0, 0

マスタシェイプは複数の図形要素で構成されていることが多いので、グループ化するとパフォーマンスが向上します。ステンシルに追加するマスタシェイプの図形要素は、必ずしもグループ化しておく必要はありません。ただし、グループ化されていないマスタシェイプは、図面へのドロップ時に Visio エンジンによって自動的にグループ化されます。この処理によって、マスタシェイプのインスタンス作成に余分な時間がかかってしまいます。


Drop メソッドでは、Shape オブジェクトおよび Master オブジェクト以外に、Selection オブジェクトや IDataObject インターフェースを備えた任意のオブジェクトを取り扱うことができます。Drop メソッドの詳細については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス」 を参照してください。


Top