表紙 へ

[PREV][マクロをつくろう INDEX][NEXT]

マクロをつくろう (4)

条件分岐 (2) ― popupmenu で選択させる

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]