[PREV] ◆ [マクロをつくろう INDEX] ◆ [NEXT]
QXマクロはポップアップメニューを出すのが簡単、と 【 QXの魅力 】 のコーナーでもご紹介していますが、この機能はじつに便利に使えます。以下、実例にそって解説します。
1| 'リスト・一覧を常駐リストに表示 2| proc main 3| '編集中のファイルがないときはマクロ中止 ― これは定石 4| if @hwnd = 0 then exit proc 5| '使う変数を宣言 6| dim i, sel, item$[10] 7| 'メニュー内容設定 8| i = 1 9| item$[i++] = "常駐リストで一覧" 'アイテム1 = メニューのタイトル 10| item$[i++] = chr$(1) + "-" 'アイテム2 = 区切り線 11| item$[i++] = "見出し" 'アイテム3 12| item$[i++] = "マーク" 'アイテム4 13| item$[i++] = "関数" 'アイテム5 14| item$[i++] = "コメント" 'アイテム6 15| item$[i++] = "文字列" 'アイテム7 16| 'ポップアップメニューを表示 17| sel = popupmenu(item$) 18| if sel < 3 then exit proc 'アイテム1と2の選択を無効に 19| @@ToolListMiscDoc = -1 '強調位置連動オン 20| @@ToolListAutoUpdate = 1 '自動更新オン 21| @@PrintToolList = -1 '常駐リストを表示 22| @@ToolListType = 4 'その他リストを表示 23| @@ListAutoClose = 1 24| '選択結果にしたがって実行 25| if sel = 3 then 26| @ListCaption 'アイテム3なら見出し一覧を表示 27| elseif sel = 4 then 28| @ListMark '4ならマーク一覧 29| elseif sel = 5 then 30| @ListFunction '5なら関数一覧 31| elseif sel = 6 then 32| @ListComment '6ならコメント一覧 33| elseif sel = 7 then 34| @ListUserInput '7ならユーザー定義文字列一覧 35| end if 36| end proc
上のマクロで、(スタイルシートが有効であれば)青い文字になっているところがポップアップメニューに関する行です。9行から15行でメニューの内容を設定しています。メニューアイテムのようなものを格納するには、「配列」を使用します。変数の宣言のなかにある item$[10] というのが「アイテム数10個の配列を使う」という記述です。まずこうやって変数の宣言の段階からメニューに対応することが必要です。
メニュー設定では「i++」という表現を使って1行ごとに自動的に i が1ずつ増えるようにしていますが、この方法を使うとメニューアイテムの入替えや数の変更が楽です。もちろん item$[1]、item$[2]、というふうにちゃんと書いてもいいのです。
17行でポップアップメニューを表示して選択結果を変数 sel に格納し、その結果に応じて if で条件分岐をして、25行から35行で命令を実行しています。
このようなポップアップメニューが、特に指定していないのでマウスカーソルの位置を起点として、表示されます。QXのアプリウィンドウ内においてのメニューの表示位置を指定するには、x,y 座標をドットで、popupmenu(item$, 150, 150) のように指定します。18行では、アイテム3以降のものだけについて実行されるように、アイテム2(区切り線)までを除外しています。「ESC」でメニューを消したときはアイテム番号が「0」になるので、その場合もここで除外されることになります。
[PREV] ◆ [マクロをつくろう INDEX] ◆ [NEXT]