概要 - メニューをコントロールする(AutoLISP)

menucmd 関数は、メニュー バー、作図領域、イメージ タイルのメニューの表示をコントロールします。

この関数は、現在のメニューのサブメニューを表示、変更、またはその状態を調べ、引数としてサブメニューおよびそのサブメニュー上で実行する動作を指定する文字列を指定します。menucmd 関数の引数には、次に示すような等号で区切った 2 つのフィールドで構成される文字列を指定します。

(menucmd "menu_area=action")

menu_area フィールドには、メニューのどの部分が動作を受け取るかを指定します。このフィールドには、ショートカット メニューの P0 または特定のメニュー項目を指定できます。action フィールドには、メニュー領域やメニュー項目上で実行する動作、またはメニュー領域にロードするサブメニューを指定できます。動作の対象となるメニュー領域は、カスタマイズ ファイルのサブメニュー参照で使用されるものと同じです。

メニュー領域ごとに、現在ロードされているサブメニューがあります。既定では、メニュー セクション ラベルの直後の最初のサブメニューがそのメニュー領域にロードされます。

menu_area にプルダウン メニューまたはイメージ タイル メニューを指定しているときは、action にアスタリスク( * )を指定できます。これにより、メニューを表示することができます(プルダウン メニューとイメージ タイル メニューは、呼び出されたときに自動的に表示されるわけではありません)。

注: Windows では、P0 (ショートカット)メニューとイメージ タイル メニューだけがアスタリスクによって表示されます。イメージ タイル メニューは AutoCAD for Mac ではサポートされません。

次のコードは、エイリアス 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)
)