秀丸マクロ: メニューの表示方法
メニュー表示文の種類
秀丸マクロでメニューを表示するには複数の文があります。
メニュー内容の指定方法と、メニューの表示場所によって使い分けてください。
文 | 内容 |
---|---|
menu | カンマ区切りで指定し、メニューを文字カーソルの近くに表示 |
mousemenu | カンマ区切りで指定し、メニューをマウスカーソルの近くに表示 |
menuarray | 配列で指定し、メニューを文字カーソルの近くに表示 |
mousemenuarray | 配列で指定し、メニューをマウスカーソルの近くに表示 |
表示方法①: カンマ区切り
メニュー内容をカンマ区切りの文字列で指定する場合は、 menu文か、mousemenu文を使います。
3つのメニューを表示させ、 どのメニューが選択されたかを判断するコードです。
// メニュー表示 menu "メニューA", "メニューB", "メニューC"; // message(str(result)); resultを表示 if (result == 1){ // メニューA の処理 }else if (result == 2){ // メニューB の処理 }else if (result == 3){ // メニューC の処理 }else { endmacro; }
次のようなメニューが表示されます。

メニュー項目が多い場合
メニュー項目が多い場合は、 横に長くなると見にくいので、 カンマで改行すると見やすくなります。
menu "メニューA", "メニューB", "メニューC";
表示方法②: 配列指定
メニュー内容を配列で指定する場合は、 menuarray文か、mousemenuarray文を使います。 第1引数で配列名、第2引数でメニュー項目の表示数を指定。
コードは次のようになります。
// メニュー用配列 $arr[0] = "メニューA"; $arr[1] = "メニューB"; $arr[2] = "メニューC"; // メニュー表示 第2引数でメニュー項目の表示数を指定 menuarray $arr, 3; if (result == 1){ // メニューA の処理 }else if (result == 2){ // メニューB の処理 }else if (result == 3){ // メニューC の処理 }else { endmacro; }
選択結果を取得 result
メニューの選択結果は「result」で取得します。
1番目のメニュー項目が選択された場合、resultの値は「1」です。
「0」ではありません。
escape キーなどで取り消した場合は「0」です。
配列指定でメニューを表示する場合は、 resultの値と配列のインデックスの値が1つズレていますから、 注意が必要です。
メニュー項目をキーボードから選択
メニュー項目をキーボードから選択できるようにするには、 文字列の末尾に「(&キー)」の形式で記述します。 例えば、「(&a)」の場合は「a」キーを押すと該当メニューが選択されます。
menu "メニューA(&a)",
"メニューB(&b)",
"メニューC(&c)";
下図ではメニューの文字列のあとにキーボードの割り当てが表示されています。

セパレーターを表示
メニューにセパレーターを表示したい場合、 「"\x01"」を指定します。
セパレーターもメニューの1つとみなされます。ですから セパレータを入れることで「result」の値が1つずれることに注意 してください。 下のサンプルコードの場合、「メニューC」は「result == 4」の場合となります。
menu "メニューA(&a)",
"メニューB(&b)",
"\x01",
"メニューC(&c)";
if (result == 1){
// メニューA の処理
}else if (result == 2){
// メニューB の処理
}else if (result == 4){
// メニューC の処理
}else {
endmacro;
}
下図ではメニューBとメニューCの間にセパレーターが表示されています。
