関数を使用することで、メニューの項目を作成する作業を楽にできた。入れ子にも対応している。使い方は以下のとおりだ。第一引数にはメニュー上に表示したい文字列を記述する。第二引数には、そのメニューが選択されたときに実行する処理のラベル名を記述する。引数を一つも取らないよう記述する、つまり AddMenuItem()と書けば、そこに境界線を引く。
AddMenuItem( "English") AddMenuItem( "Dvorak" ) AddMenuItem( "Dvorak Simplified Keyboard - Wikipedia", "url_Dvorak_wikipedia_dsk" ) AddMenuItem( "Dvorak配列 - Wikipedia", "url_Dvorak_wikipedia" ) AddMenuItem( "Programmer Dvorak Keyboard Layout", "url_programmer_Dvorak" ) AddMenuItem( "片手用 Dvorak 配列", "url_one-handed_Dvorak" ) AddMenuItem() AddMenuItem( "Dvorak 配列(blechmusik 版)の図", "about_Dvorak_Layout_blechmusik_image") AddMenuItem( "Dvorak 配列(記号特化版)の図", "about_Dvorak_Layout_for_programmers_image") AddMenuItem( "English", "Dvorak 配列", "Dvorak" ) AddMenuItem() AddMenuItem( "Colemak 配列", "url_Colemak" ) AddMenuItem( "MyMenuBar", "英語配列", "English")
関数のソースを以下に示そう。
AddMenuItem( MenuItemName="", Label="", SubMenu="") { static static_MenuName static static_obj If !IsObject(static_obj) { static_obj := Object("count", 0) } ;; AddMenuItem() if ( !( MenuItemName ) ) { Menu, %static_MenuName%, Add } else if ( !( Label ) ) ; AddMenuItem( MenuItemName ) { static_obj.count := static_obj.count + 1 static_obj[static_obj.count] := MenuItemName static_MenuName := static_obj[static_obj.count] } else if ( Submenu ) ; AddMenuItem( MenuItemName, , Label, SubMenu) { ;; サブメニューを展開するとき Menu, %MenuItemName%, Add , %Label% , :%static_MenuName% static_obj.count := static_obj.count - 1 static_MenuName := static_obj[static_obj.count] } else { Menu, %static_MenuName%, Add , %MenuItemName% , %Label% } return }