秀丸マクロ: メニューの表示方法

メニュー表示文の種類

秀丸マクロでメニューを表示するには複数の文があります。
メニュー内容の指定方法と、メニューの表示場所によって使い分けてください。

内容
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;
}

次のようなメニューが表示されます。

秀丸マクロ メニュー1

メニュー項目が多い場合

メニュー項目が多い場合は、 横に長くなると見にくいので、 カンマで改行すると見やすくなります。

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)";

下図ではメニューの文字列のあとにキーボードの割り当てが表示されています。

秀丸マクロ メニュー2

セパレーターを表示

メニューにセパレーターを表示したい場合、 「"\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の間にセパレーターが表示されています。

秀丸マクロ メニュー セパレーター