メニューに新しいメニュー項目を追加するには AddMenuItem メソッドを使用します。このメソッドは新しい PopupMenuItem オブジェクトを作成し、指定されたメニューに追加します。
AddMenuItem メソッドは入力として、Index、Label、Tag、Macro の 4 つのパラメータを受け取ります。
Index パラメータは、メニュー内における新しいメニュー項目の位置を指定する整数です。インデックスは、タイトルに続くメニューの先頭位置として、位置ゼロ(0)から始まります。メニューの最後に新しいメニュー項目を追加するには、Index パラメータにメニューの Count プロパティと同じ値を指定します(メニューの Count プロパティはそのメニューのメニュー項目の合計数を表します)。
最初のインデックス位置はゼロ(0)であり、セパレータ(区切り記号)もインデックス位置とともにメニュー項目として記載されます。図に描かれたメニューの Count プロパティは 6 のはずです。[上下に並べて表示]と[左右に並べて表示]の間にメニュー項目を追加するには、Index パラメータをメニュー項目[上下に並べて表示]のインデックスである 2 に設定します。この値によって、新しいメニュー項目がインデックス 2 に挿入され、その後ろに続くすべてのメニュー項目のインデックス位置が 1 ずつ後ろにずれていきます。
メニュー項目を作成した後で、Index プロパティを使用してメニュー項目のインデックスを変更することはできません。既存のメニュー項目のインデックスを変更するには、メニュー項目を削除して別の位置に追加し直すか、目的の配置になるまで周囲のメニュー項目の追加や削除を行います。
ラベルは、メニュー項目の内容と形式を定義する文字列です。メニュー項目のラベルには、表示のたびに条件に応じてラベルを変更する DIESEL 文字列式を入れることができます。
DIESEL 文字列式の他にも、ラベル名に特殊コードを入れることができます。たとえば、文字の直前にアンパサンド(&)を入れると、その文字をアクセラレータ キーとして指定することができます。
メニュー項目としてユーザに表示される文字のことをタイトルと呼び、ラベルに含まれているすべての DIESEL 文字列式と特殊コードを変換して生成されます。たとえば、ラベル "&Edit" からは、"Edit" が生成されます。
メニュー項目を作成した後で、Label プロパティを使用して、メニュー項目のラベルを変更することができます。
タグは名前タグとも呼び、英数字とアンダースコア(_)から成る文字列です。この文字列は特定のメニュー内のメニュー項目を一意に識別するためのものです。
メニュー項目を作成した後で、TagString プロパティを使用してメニュー項目のタグを変更することができます。
マクロは、メニュー項目が選択されたときに特定のアクションを実行する一連のコマンドです。メニュー マクロには、タスクを遂行するキーストロークを列挙しただけのものもあれば、コマンド、AutoLISP、DIESEL、または ActiveX プログラミング コードを複雑に組み合わせたものもあります。
メニュー項目を作成した後で、Macro プロパティを使用してメニュー項目のマクロを変更することができます。
次の例は、"TestMenu" という名前で新しいメニューを作成し、メニュー項目を挿入します。メニュー項目は、"Open" と名付けられ、OPEN[開く]コマンドがマクロとして割り当てられます。
Sub Ch6_AddAMenuItem() Dim currMenuGroup As AcadMenuGroup Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0) ' Create the new menu Dim newMenu As AcadPopupMenu Set newMenu = currMenuGroup.Menus.Add("TestMenu") ' Add a menu item to the new menu Dim newMenuItem As AcadPopupMenuItem Dim openMacro As String ' Assign the macro the VBA equivalent of "ESC ESC _open " openMacro = Chr(3) + Chr(3) + "_open " Set newMenuItem = newMenu.AddMenuItem _ (newMenu.count + 1, "Open", openMacro) ' Display the menu on the menu bar newMenu.InsertInMenuBar _ (ThisDrawing.Application.menuBar.count + 1) End Sub