第 22 章 VISIO ユーザー インターフェースのカスタマイズ
変更する UIObject オブジェクト、カスタム ユーザー インターフェースの適用範囲と有効期間が決定したら、インターフェースの変更を開始できます。削除、挿入といった操作の対象となる項目を指定するには Visio® オブジェクト モデル内でその項目を順に指定します。まず、UIObject オブジェクトを取得します。次に、メニュー、ショートカット キー、ツールバー、またはステータス バー を取得し、最後に変更する項目を取得します。ユーザー インターフェースの変更後、カスタマイズした UIObject オブジェクトを設定し、ユーザー インターフェースを有効にする必要があります。
このセクションの内容?
MenuSet、ToolbarSet、AccelTable、StatusBar オブジェクトの取得
MenuSet、ToolbarSet、AccelTable、または StatusBar オブジェクトを取得するには、対象のコレクションの ItemAtID メソッドを使用して、目的のオブジェクトの ID を指定します。ItemAtID で使用できる定数の一覧については、Visio 製品付属のオンライン ヘルプ」開発者用リファレンス ([ヘルプ] メニューから [開発者用リファレンス] を選択) で ItemAtID を検索してください。
たとえば以下のコードでは、定数 visUIObjSetDrawing を使用して、図面ウィンドウ メニューを表す MenuSet オブジェクトを取得しています。
Dim uiObj As Visio.UIObject
Dim menuSetObj As Visio.MenuSet
'Get a UIObject object that represents a copy of the built-in Visio menus
Set uiObj = Visio.Application.BuiltInMenus
'Get the drawing window menu set
Set menuSetObj = _
uiObj.MenuSets.ItemAtId(visUIObjSetDrawing)
以下の例では、定数 visUIObjSetShapeSheet を使用して、シェイプシート (ShapeSheet®) ウィンドウのツールバーを表す ToolbarSet オブジェクトを取得しています。
Dim uiObj As Visio.UIObject
Dim toolbarSetObj As Visio.ToolbarSet
'Get a UIObject object that represents a copy of the built-in Visio toolbars
Set uiObj = Visio.Application.BuiltInToolbars(0)
'Get the ShapeSheet window toolbar set
Set toolbarSetObj = _
uiObj.ToolbarSets.ItemAtID(visUIObjSetShapeSheet)
最も一般的に使用される 7 つのウィンドウ コンテキストの ItemAtID に指定できる定数を以下の表に示します。これらの定数は、Visio タイプ ライブラリで定義されています。MenuSet、ToolbarSet、AccelTable、および StatusBar オブジェクトで使用可能なショートカット メニュー、パレット、ポップアップ ウィンドウを表すウィンドウ定数の一覧については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス」 ([ヘルプ] メニューから [開発者用リファレンス] を選択) を参照してください。
ウィンドウ定数を表す ID 定数
キー |
![]() ![]() |
![]() ![]() |
ID 定数 | コンテキスト | オブジェクト |
---|---|---|
visUIObjSetNoDocument | Visio ウィンドウ、図面は開いていない |
![]() ![]() ![]() ![]() |
visUIObjSetDrawing | 図面ウィンドウ |
![]() ![]() ![]() ![]() |
visUIObjSetStencil | ステンシル ウィンドウ |
![]() ![]() ![]() ![]() |
visUIObjSetShapeSheet | シェイプシート (ShapeSheet®) ウィンドウ |
![]() ![]() ![]() ![]() |
visUIObjSetIcon | アイコン編集ウィンドウ |
![]() ![]() ![]() ![]() |
visUIObjSetInPlace | 埋め込み先編集ウィンドウ |
![]() ![]() |
visUIObjSetPrintPreview | 印刷プレビュー ウィンドウ |
![]() ![]() ![]() ![]() |
UIObject オブジェクトの取得後、ユーザー インターフェースから項目を追加または削除できます。
項目を追加するには、Visio オブジェクト モデルの UIObject 階層を移動して、追加する項目を含むコレクションを取得し、そのコレクションの Add または AddAt メソッドを使用します。
以下の例では、Visio 図面ウィンドウがアクティブなときに使用できるメニューとメニュー項目を新規に追加しています。
Dim uiObj As Visio.UIObject
Dim menuSetsObj As Visio.MenuSets
Dim menuSetObj As Visio.MenuSet
Dim menusObj As Visio.Menus
Dim menuObj As Visio.Menu
Dim menuItemsObj As Visio.MenuItems
Dim menuItemObj As Visio.MenuItem
'Get a UIObject object that represents a copy of the built-in Visio menus
Set uiObj = Visio.Application.BuiltInMenus
'Get the MenuSets collection
Set menuSetsObj = uiObj.MenuSets
'Get drawing window MenuSet object; Get the context
Set menuSetObj= menuSetsObj.ItemAtId(visUIObjSetDrawing)
'Get the Menus collection
Set menusObj = menuSetObj.Menus
'Add a Demo menu before the Window menu
'A menu without a menu item will not appear.
Set menuObj = menusObj.AddAt(7)
menuObj.Caption = "デモ"
この例の前半には、[ウィンドウ] メニューが初期状態の位置 (メニュー バーの左から 7 番目) にあることを想定して記述された部分があります。メニューを追加、削除すると、他のメニューの位置が変わる可能性があります。
下に示すコード例の後半部分では、[デモ] メニューにメニュー項目を追加し、メニュー項目のプロパティを設定しています。詳細については、「項目のプロパティの設定」を参照してください。
以下のコードの例では、Add メソッドを使用して、上のコードの例で追加された [デモ] メニューに項目を 1 つ追加しています。Add メソッドで追加した項目はコレクションの末尾に追加されます。この例で追加しているメニュー項目は 1 つだけなので、その位置を考慮する必要はありませんしかし、Add メソッドを使用してさらに項目を追加すると、その項目はメニューの一番下に表示されます。AddAt メソッドを使用すると、メニュー内での項目の表示位置をその順番で指定できます。
'Get the MenuItems collection
Set menuItemsObj = menuObj.MenuItems
'Add a MenuItem object to the new Demo menu
Set menuItemObj = menuItemsObj.Add
'Set the properties for the new menu item
menuItemObj.Caption = "デモ プログラムの実行(&D)"
menuItemObj.AddOnName = "Demo.EXE"
menuItemObj.AddOnArgs = "/DVS=Fun"
menuItemObj.MiniHelp = "デモ プログラムを実行します。"
'Tell Visio to use the new UIObject (custom menus)
'while the document is active
ThisDocument.SetCustomMenus uiObj
最後のステートメント ThisDocument.SetCustomMenus uiObj では、Visio インスタンスに図面がアクティブなときはカスタム メニューを使用することを指示しています。カスタム ユーザー インターフェースの変更は、ユーザーが図面を閉じた後には無効になります。
メニュー項目は、アイコン、テキスト、またはテキスト付きアイコンで構成されます。ユーザーがアイコンを含むメニュー項目を選択すると、そのアイコンはメニュー上で押された状態で表示されます。ユーザーがテキストだけのメニュー項目を選択すると、その項目はメニューにチェックマーク付きで表示されます。以下のコードは、テキスト付きのアイコン (Smiley.ico) を含む 3 つのメニュー項目 (Item 1,Item 2,および Item 3) のプロパティの設定方法を示しています。
Dim i As Integer
For i = 1 To 3
'Add a menuitem
Set menuitemObj = menuObj.MenuItems.Add
With menuitemObj
'Set the caption text
.Caption = "Item " & Str(i)
'Set the icon
.IconFileName "c:¥smiley.ico"
'Make the item show an icon and text
.Style = Visio.visButtonIconandCaption
'Make the item pressed/unpressed
.State = IIf(i = 1, Visio.visButtonDown, Visio.visButtonUp)
'Tell the item to run this code when selected
.AddOnName = "ThisDocument.ItemProc(" & Str(i) & ")"
End With
Next
以下の例では、プログラムがメニュー上の各項目が選択されているかどうかを識別するため、項目に繰り返し操作を行います。
Dim i As Integer
For i = 0 To menuObj.MenuItems.Count - 1
Set menuitemObj = menuObj.MenuItems(i)
'Set the menu item as checked/unchecked
menuitemObj.State = IIf(i = (item - 1), _
Visio.visButtonDown, Visio.visButtonUp)
Next
カスタム ツールバー ボタンは、特定の組み込みツールバー、またはカスタム ツールバー全体に追加できます。以下の例では、図面ウィンドウ コンテキストの組み込みツールバーのコピーにツールバー ボタンを 1 つ追加する方法を示しています。
Sub AddToolbarButton( )
'Object variables to be used in the program
Dim uiObj As Visio.UIObject
Dim toolbarSetObj As Visio.ToolbarSet
Dim toolbarItemsObj As Visio.ToolbarItems
Dim objNewToolbarItem As Visio.ToolbarItem
'Get the UIObject for the toolbars
Set uiObj = Visio.Application.BuiltInToolbars(0)
'Get the Drawing Window ToolbarSet object
Set toolbarSetObj = uiObj.ToolbarSets.ItemAtID(visUIObjSetDrawing)
'Get the ToolbarItems collection
Set toolbarItemsObj = toolbarSetObj.Toolbars(0).ToolbarItems
'Add a new button in the first position
Set objNewToolbarItem = toolbarItemsObj.AddAt(0)
'Set the properties for the new toolbar button
objNewToolbarItem.ActionText = "ステンシル レポート ウィザードの実行"
objNewToolbarItem.AddOnName = "Stndoc.exe"
objNewToolbarItem.CntrlType = visCtrlTypeBUTTON
objNewToolbarItem.Priority = 1
'Set the icon for the new toolbar button
objNewToolbarItem.IconFileName "dvs.ico"
'Tell Visio to use the new custom toolbars while the document is active
ThisDocument.SetCustomToolbars uiObj
End Sub
例で使用したステートメントについて以下に説明します。
Set toolbarItemsObj = toolbarSetObj.Toolbars(0).ToolbarItems ツールバーは、縦方向に順序付けられます。Toolbar オブジェクトの位置指定では、0 が一番外側のツールバーを表します。
Set objNewToolbarItem = toolbarItemsObj.AddAt(0) ツールバー項目は横方向に順序付けされます。ツールバーを横に固定表示する場合は、このステートメントは ToolbarItem、つまりボタンをツールバーの左端に追加します。また、ツールバーを縦に固定表示する場合は、ツールバーの一番上に追加します。
objNewToolbarItem.CntrlType = visCtrlTypeBUTTON では、表示するツールバー ボタンの種類が設定されます。CntrlType プロパティは、ステータス バー項目にも使用されます。デフォルトの Visio ツールバー ボタンの定数はほかにもありますが、カスタム ツールバー ボタンに使用できるのは、visCtrlTypeBUTTON、PALETTEBUTTON、PALETTEBUTTONNOMRU、または PALETTEBUTTONICON だけです。
objNewToolbarItem.Priority = 1 では、このツールバー項目に最も高い優先順位が与えられます。ツールバー項目は、どんな解像度でもすべて表示されるとは限りません。VGA のような低解像度のモニターでは、表示できる項目は制限されます。使用するモニターの解像度が低いと、優先度の低いツールバー項目は表示されず、優先度の高い項目だけが表示されます。モニターの解像度が高いほど、多くのツールバー項目を表示できます。
objNewToolbarItem.IconFileName "dvs.ico" では、[ファイルパスの設定] タブで指定された Visio アドオン パスのフォルダから、表示するツールバーのためのビットマップを格納している Dvs.ico ファイルを取得します。アイコンファイルには、32 × 32 ピクセルのアイコンと、16 × 16 ピクセルのアイコンが格納されています。Visio は、16 × 16 ピクセルのアイコンは「小さいアイコン」で、32 × 32 ピクセルのアイコンは「大きいアイコン」で表示します。
ThisDocument.SetCustomToolbars uiObj では、図面がアクティブな間カスタム ツールバーを使用するよう指定しています。
以下の例では、[テスト] という名前の浮動表示のツールバーの追加方法を示しています。この浮動ツールバーは固定表示できませんが、図面ウィンドウ コンテキストでは非表示にすることができます。このプログラムは最初に Visio 図面またはインスタンスがカスタム ツールバーを使用するかどうかをチェックし、UIObject オブジェクトに uiObj 変数を割り当てています。次にプログラムは図面ウィンドウ コンテキストに Toolbars コレクションを取得し、新しいツールバーを追加し、そのプロパティを設定します。
Sub AddToolbar()
Dim uiObj As UIObject
Dim toolbarsObj As Toolbars
Dim toolbarObj As Toolbar
Dim toolbarItemsObj As ToolbarItems
Dim toolbarItemObj As ToolbarItem
'Check if the document has custom toolbars
If ThisDocument.CustomToolbars Is Nothing Then
'Check if the instance is using custom toolbars
If Visio.Application.CustomToolbars Is Nothing Then
'Use the built-in toolbars
Set uiObj = Visio.Application.BuiltInToolbars(0)
Else
'Use the application's custom oolbars
Set uiObj = Visio.Application.CustomToolbars.Clone
End If
Else
'Use the document's custom toolbars
Set uiObj = ThisDocument.CustomToolbars
End If
'Get the Toolbars collection for the drawing window context
Set toolbarsObj = uiObj.ToolbarSets.ItemAtID( _
Visio.visUIObjSetDrawing).Toolbars
'Add a toolbar
Set toolbarObj = toolbarsObj.Add
With toolbarObj
'Set the toolbar's title
.Caption = "テスト"
'Position the toolbar floating at the coordinates 300, 200
.Position = Visio.visBarFloating
.Left = 300
.Top = 200
'Disallow docking
.Protection = Visio.visBarNoHorizontalDock _
+ Visio.visBarNoVerticalDock
'Make the new toolbar visible
.Visible = True
'Allow the user to hide and show the toolbar
.Enabled = True
End With
End Sub
項目追加後、その項目を定義するプロパティを設定できます。たとえば、メニューに表示されるテキストを定義するにはメニュー項目の Caption プロパティを設定し、表示するアイコンの指定、取得にはツールバーまたはメニュー項目の IconFileName メソッドを設定します。IconFileName メソッドは、アイコン ファイルからビットマップを抽出し、インターフェースとともにそれを格納するので、以後アイコン ファイルは不要になります。既存の項目のプロパティの変更もできます。
メニュー項目とツールバー項目には、重要な 2 つのプロパティがあります。一つは CmdNum で、項目に関連するコマンドの ID を指定します。もう一つは AddOnName で、ユーザーによるメニュー項目の選択やボタンのクリック時に実行するプログラムやマクロを指定します。プログラムがコマンド ライン引数を使用する場合、その引数は AddOnArgs プロパティで指定します。特定の項目のプロパティおよびメソッドの詳細については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス」 ([ヘルプ] メニューから [開発者用リファレンス] を選択) で各項目を検索してください。
Caption プロパティには、メニューまたはメニュー項目上に表示するテキストを指定します。メニュー項目にショートカット キーを表示するには、Caption プロパティのテキストとして、"\a" の後にスペースを 2 つ挿入してショートカット キーのテキストを記述します。以下に例を示します。
"開く...¥a Ctrl+O"
この例では、[開く...] はメニュー項目のキャプションで、Ctrl+O はショートカット キーのテキストです。\a はショートカット キーのテキストの表示を揃えるための文字です。Caption プロパティにショートカット キーのテキストを追加しても、ショートカット キーそのものは追加されず、そのテキストがキャプションの一部として表示されるだけです。実際のショートカット キーを追加するには、Visio オブジェクト モデルでショートカット キー オブジェクトを使用します。
以下の例に示すように、他のプロパティも指定できます。
menuItemObj.ActionText = "デモ 1 の実行"
menuItemObj.MiniHelp = "デモ 1 アプリケーションを実行します。"
accelItemObj.Key = 8 'Backspace key
accelItemObj.Alt = True
ActionText プロパティには、[元に戻す]、[やり直す]、[繰り返す] のメニュー項目がある [編集] メニューに表示するテキストを指定します。このテキストは、エラー メッセージ、ツールバーのボタンのヒントとして表示される場合もあります。MiniHelp プロパティには、ユーザーがメニュー項目をポイントしたとき、ステータス バーに表示されるテキストを指定します。
Key プロパティには、ショートカット キーの ASCII キーコードの値を指定します。たとえば、Backspace キーの ASCII キーコードは 8 で、Esc キーの ASCII キーコードは 27 です。ASCII キーコードの詳細については、「Microsoft Platform Software Development Kit(SDK)」のオンライン マニュアルを参照してください。Alt、Control、および Shift プロパティは、ショートカット キー用の Key プロパティを変更 (修飾) します。ショートカット キーのプロパティを指定するには、修飾キー (Alt、Control、Shiftキー) のいずれかの組み合わせを True に設定し、キーコードを 1 つ指定し、項目の CmdNum または AddonName プロパティを設定します。ショートカット コマンドをアクティブにするには、キー コードに対応するキーと修飾キーを同時に押します。
CmdNum プロパティには、項目のコマンド ID を指定します。Visio に組み込まれているすべてのメニュー項目およびツールバー項目は Visio コマンドに対応しており、それぞれのコマンド ID を持っています。たとえば、[シェイプシートを表示] のコマンド ID は visCmdWindowShowShapeSheet で、[図面ステンシルを表示] のコマンド ID は visCmdWindowShowMasterObjects です。有効なコマンド ID の一覧については、オブジェクト ブラウザの Visio タイプ ライブラリで "visCmd." を検索してください。
ヒント Visio ユーザー インターフェースを非表示にし、Visio ウィンドウだけを表示するには、Application オブジェクトの ShowToolbar、ShowStatusBar、および ShowMenus プロパティを False に設定します。これらのプロパティは順に、ツールバー、ステータス バー、およびメニューを非表示にします。
項目が Visio の組み込みユーザー インターフェースの一部であるか、自分で追加したカスタム項目であるかにかかわりなく、Visio ユーザー インターフェースから任意の項目を削除できます。ツールバーまたはメニュー項目を一時的に使用禁止にしたいときは、削除せずに、その Enabled プロパティを False に設定します。この項目は淡色で表示されます。
項目を削除しても、その項目の機能が削除されることはなく、その機能にアクセスする方法だけが削除されます。したがってショートカット キーなど、それ以外の方法で引き続きその機能を使用できます。たとえば、[編集] メニューの [コピー] コマンドを削除しても、ショートカット キー (Ctrl+C) は削除されません。ユーザーは Ctrl キーを押しながら C キーを押すことでコピー機能を引き続き使用できます。[ウィンドウ] メニューから [シェイプシートを表示] コマンドを削除することもできますが、図形のダブルクリックでシェイプシート ウィンドウを表示するよう設定されていれば、その方法でウィンドウを表示できます。
ヒント Visio に組み込まれているすべてのメニュー項目とツールバー項目は Visio コマンドに対応しており、それぞれのコマンド ID を持っています。これらの Visio 項目を削除する場合、コマンド ID で削除する項目を特定できます。しかし、プログラムまたはマクロを実行するカスタム メニュー項目またはツールバー項目の CmdNum プロパティは、Visio コマンド ID には対応していません。そのため、項目の削除では、コマンド ID による項目の特定はできません。その代わりに、カスタム メニューまたはツールバー項目の Caption プロパティ文字列でその項目を指定できます。
項目を削除するには、その項目の Delete メソッドを使用します。たとえば、以下のステートメントでは、実行中の Visio インスタンスの図面ウィンドウに表示されている [ウィンドウ] メニューから メニュー項目 [シェイプシートを表示] を削除します。
Dim uiObj As Visio.UIObject
Dim menuSetObj As Visio.MenuSet
Dim menuItemsObj As Visio.MenuItems
Dim i As Integer
Set uiObj = Visio.Application.BuiltInMenus
Set menuSetObj = _
uiObj.MenuSets.ItemAtID(visUIObjSetDrawing)
'Get the Window menu
Set menuItemsObj = menuSetObj.Menus(7).MenuItems
'Get the Show ShapeSheet menu item by its CmdNum 'property.
'This technique works with localized versions of Visio.
For i = 0 To menuItemsObj.Count -1
If menuItemsObj(i).CmdNum = _
visCmdWindowShowShapeSheet Then
menuItemsObj(i).Delete
Exit For
End If
Next i
'Replace built-in Visio menus with customized set
Visio.Application.SetCustomMenus uiObj
以下のマクロは、図面ウィンドウ コンテキストで使用している Visio の組み込みツールバーから、[スペル チェック] ツールバー ボタンを削除する方法を示しています。
Sub DeleteToolbarButton( )
Dim uiObj As Visio.UIObject
Dim toolbarSetObj As Visio.ToolbarSet
Dim toolbarItemsObj As Visio.ToolbarItems
Dim toolbarItemObj As Visio.ToolbarItem
Dim i As Integer 'Loop variable
'Get the UIObject object for the toolbars
Set uiObj = Visio.Application.BuiltInToolbars(0)
'Get the drawing window ToolbarSet object
Set toolbarSetObj = uiObj.ToolbarSets.ItemAtID(visUIObjSetDrawing)
'Get the ToolbarItems collection
Set toolbarItemsObj = toolbarSetObj.Toolbars(0).ToolbarItems
'Get the Spelling ToolbarItem object
'Because this code gets the built-in Visio toolbars, you know you'll find the Spelling
'toolbar item. If code got a custom toolbar, it might not include the Spelling toolbar
'item.
For i = 0 To toolbarItemsObj.Count - 1
'Get the current ToolbarItem object from the collection
Set toolbarItemObj = toolbarItemsObj(i)
'Check whether the current toolbar item is the Spelling button
If toolbarItemObj.CmdNum = visCmdToolsSpelling Then
Exit For
End If
Next i
'Delete the Spelling button
toolbarItemObj.Delete
'Tell Visio to use the new custom toolbars while the document is active
ThisDocument.SetCustomToolbars uiObj
End Sub
以下のマクロは、図面ウィンドウ コンテキストで使用されている Microsoft Visual Basic エディタへのショートカット キーを削除する方法を示しています。
Sub DeleteAccelItem( )
Dim uiObj As Visio.UIObject
Dim accelTableObj As Visio.AccelTable
Dim accelItemsObj As Visio.AccelItems
Dim accelItemObj As Visio.AccelItem
Dim i As Integer
'Retrieve the UIObject object for the copy of the built-in menus
Set uiObj = Visio.Application.BuiltInMenus
'Set accelTableObj to the Drawing menu set
Set accelTableObj = uiObj.AccelTables.ItemAtID(visUIObjSetDrawing)
'Retrieve the accelerator items collection
Set accelItemsObj = accelTableObj.AccelItems
'Retrieve the accelerator item for the Visual Basic Editor by iterating
'through the accelerator items collection and locating the item you want to delete.
For i = 0 To accelItemsObj.Count - 1
Set accelItemObj = accelItemsObj.Item(i)
If accelItemObj.CmdNum = Visio.visCmdToolsRunVBE Then
Exit For
End If
Next i
'Delete the accelerator
accelItemObj.Delete
'Tell Visio to use the new custom menuswhile the document is active.
ThisDocument.SetCustomMenus uiObj
End Sub
Visio ユーザー インターフェースをカスタマイズするコードを記述した後、オブジェクトにカスタム ユーザー インターフェースを設定し、カスタマイズしたユーザー インターフェースを有効にするコードを記述する必要があります。この作業を終了すると、プログラムが UIObject オブジェクトに加えた変更が Visio インスタンス内に表示されます。
カスタム ユーザー インターフェースの変更を有効にするには、Document または Application オブジェクトの SetCustomMenus または SetCustomToolbars メソッドを使用して、カスタム ユーザー インターフェースを表す UIObject オブジェクトを指定します。たとえば、以下のステートメントは図面のカスタム メニューを設定しています。
ThisDocument.SetCustomMenus uiObj
ある Visio セッションですべての図面にカスタム ツールバーを設定するには、以下のステートメントを指定します。
Visio.Application.SetCustomToolbars uiObj
Visio インスタンスの実行中は常にアクティブになるカスタム ツールバー、またはカスタム メニューを表す UIObject オブジェクトを変更する場合、UIObject オブジェクトの UpdateUI メソッドを使用して、その変更を表示します。以下に例を示します。
'Get the UIObject object for the custom menus
Set uiObj = Visio.Application.CustomMenus
...'Code changes to the custom interface
'Update custom interface with changes
uiObj.UpdateUI