menucmd 関数は、メニュー バー、作図領域、イメージ タイルのメニューの表示をコントロールします。
この関数は、現在のメニューのサブメニューを表示、変更、またはその状態を調べ、引数としてサブメニューおよびそのサブメニュー上で実行する動作を指定する文字列を指定します。menucmd 関数の引数には、次に示すような等号で区切った 2 つのフィールドで構成される文字列を指定します。
(menucmd "menu_area=action")
menu_area フィールドには、メニューのどの部分が動作を受け取るかを指定します。このフィールドには、ショートカット メニューの P0 または特定のメニュー項目を指定できます。action フィールドには、メニュー領域やメニュー項目上で実行する動作、またはメニュー領域にロードするサブメニューを指定できます。動作の対象となるメニュー領域は、カスタマイズ ファイルのサブメニュー参照で使用されるものと同じです。
メニュー領域ごとに、現在ロードされているサブメニューがあります。既定では、メニュー セクション ラベルの直後の最初のサブメニューがそのメニュー領域にロードされます。
menu_area にプルダウン メニューまたはイメージ タイル メニューを指定しているときは、action にアスタリスク( * )を指定できます。これにより、メニューを表示することができます(プルダウン メニューとイメージ タイル メニューは、呼び出されたときに自動的に表示されるわけではありません)。
次のコードは、エイリアス POP0 のメニューを P0 (ショートカット)メニュー領域にロードして表示します。
(menucmd "P0=POP0") ; Loads the POP0 menu into the P0 menu area (menucmd "P0=*") ; Display it
特定のメニュー領域に正しいメニューがロードされる場合は、表示させるたびにわざわざロードする必要はありません。
次のコードは、現在 P1 (最初のプルダウン メニュー)の位置にロードされているプルダウン メニューを表示します。
(menucmd "P1=*")
あらかじめメニューをロードしないで "P1=*" を使用すると、予期しない動作になることがあります。プルダウン メニューまたはショートカット メニューの位置には実際にはどんなメニューでもロードできますが、そのメニュー領域専用のメニューだけを使用するようお勧めします。たとえば、MORESTUFF というサブメニューがある場合、次のコードを使用すると P1 の位置にそのサブメニューをロードできます。
(menucmd "P1=MORESTUFF") ; Loads the MORESTUFF menu in the P1 menu location (menucmd "P1=*") ; Displays it
このメニューは、次に示すように、別のメニューをロードして置き換えるまで、同じ位置に表示されたままです。
(menucmd "P1=POP1")
メニューを使用禁止(グレー表示)にしたりマーク付けの機能を使用する場合、menucmd 関数を使用してメニュー項目ラベルの状態を調べたり変更することができます。次の呼び出しは、プルダウン メニュー P2 の 4 番目のラベルの現在の状態を調べます。
(menucmd "P2.4=#?") ; If disabled returns "P2.4=~"
次の関数呼び出しは、同じメニュー項目ラベルを使用可能および使用禁止にします。
(menucmd "P2.4=") ; Enables the label (menucmd "P2.4=~") ; Disables the label
メニュー項目ラベルの左側に、マークを付けたり除去することもできます。
メニュー項目操作についてこれまで説明してきた方法は、単一の固定メニューでは比較的うまく機能します。しかし、複数の部分メニュー ファイルがロードされ、メニュー項目の位置が変化するような場合は、信頼できなくなります。そのような場合は、メニュー グループ機能と名前タグ機能を使用すると、目的のメニュー項目に確実にアクセスできます。これには、メニュー上の位置に基づいてメニュー項目を指定する代わりに、メニュー項目に関連付けられているメニュー グループと名前タグを指定します。
メニュー グループを使用して、メニュー項目ラベルを使用可能や使用禁止にしたり、マークを付けるときは、次の例のように、グループ名の前に G を付けなければなりません。
(menucmd "Gacad.ID_New=~") ; Disables the label (menucmd "Gacad.ID_New=") ; Enables the label
AutoLISP の関数はメニュー項目ラベルを使用可能/使用禁止にできるだけでなく、ラベルに DIESEL 文字列式を使用することで、ラベルに表示される文字を変更することもできます。DIESEL は入力として文字列だけを受け入れるため、関数からの戻り値を代入したシステム変数 USERS1 - 5 を使用して DIESEL 式に情報を渡すことができます。
menucmd 関数を使用すると、AutoLISP の関数の中で DIESEL 文字列式を使用して、それを評価させることもできます。次の関数は、現在の時刻を返します。
(defun C:CTIME ( / ctim) (setq ctim (menucmd "M=$(edtime,$(getvar,date),H:MMam/pm)")) (princ (strcat "\nThe current time is " ctim )) (princ) )