ポップアップメニューを表示します。指定できるメニューは、当該ウィンドウのメニューに含まれるものだけです。メニューの内容は、MenuItemインスタンスとして予め作成しておく必要があります。
吉里吉里2 2.28以降ではMenuItem.popupメソッドの使用を推奨します。
値 | 意味 |
---|---|
tppfCenterAlign | ポップアップメニューの水平方向の中心を、xで指定した座標に合わせます。 |
tppfLeftAlign | ポップアップメニューの左端を、xで指定した座標に合わせます。 |
tppfRightAlign | ポップアップメニューの右端を、xで指定した座標に合わせます。 |
値 | 意味 |
---|---|
tppfBottomAlign | ポップアップメニューの下端を、yで指定した座標に合わせます。 |
tppfTopAlign | ポップアップメニューの上端を、yで指定した座標に合わせます。 |
tppfVCenterAlign | ポップアップメニューの垂直方向の中心を、yで指定した座標に合わせます。 |
値 | 意味 |
---|---|
tppfLeftButton | マウスの左ボタンでのみ、ポップアップメニューの選択を行えます。 |
tppfRightButton | マウスの左と右どちらのボタンでも、ポップアップメニューの選択を行えます。 |
値 | 意味 |
---|---|
tppfNoAnimation | アニメーションなしでメニューを表示します。 |
tppfHorNegAnimation | 左から右へ向かってアニメーション表示を行います。 |
tppfHorPosAnimation | 右から左へ向かってアニメーション表示を行います。 |
tppfVerNegAnimation | 下から上へ向かってアニメーション表示を行います。 |
tppfVerPosAnimation | 上から下へ向かってアニメーション表示を行います。 |
ユーザーが選択したメニュー項目の識別子を返します。ユーザーが何もメニュー項目を選択せずにメニューを取り消した場合や、エラーが発生した場合は0を返します。
事前に以下のコードが実行されていることを前提とします。
Plugins.link("util_system.dll"); // メニューを追加する。 MenuItem.addNew = function(window, caption) { var child = new global.MenuItem(window, caption); // セパレータ if (caption == '-') { child.enabled = false; } else { child.onClick = function() // runs in context of 'child' { var text = @"「${this.parent.caption}」の「${this.caption}」が選択されました。"; System.inform(text); }; } this.add(child); }; // セパレータを含む四つのメニュー項目を作成する。 function createMenu(window, menu) { with (menu) { .addNew(window, 'ほげ'); .addNew(window, 'ふが'); .addNew(window, '-'); .addNew(window, 'はにゃ'); } } // ウィンドウ作成 var win = new Window(); win.caption = 'ポップアップメニューのサンプル'; // プライマリレイヤ作成 var prim = new Layer(win, null); prim.setSize(win.innerWidth, win.innerHeight); // ウィンドウ表示 win.visible = true;
親メニュー項目に四つの子メニューを登録し、指定した座標位置に表示させます。
// 親メニュー項目 var menu1 = new MenuItem(win, '親メニュー1'); // 子メニュー作成(項目が四つ作成される) createMenu(win, menu1); // ウィンドウの親メニューに追加 win.menu.add(menu1); // 一番目に登録されている(インデックスが0)メニューを、 // クライアント座標(80, 50)の位置に表示させる win.trackPopupMenu(0, 80, 50, /*index*/0);
先のメニューを、右クリック時に表示させます。
// 前例と同じ var menu1 = new MenuItem(win, '親メニュー1'); createMenu(win, menu1); win.menu.add(menu1); // マウスが右クリックされた時のイベント。 // (この関数は'win'コンテキストで実行される) win.onMouseDown = function(x, y, button) { if (button == mbRight) { trackPopupMenu(0, x, y, 0); } };
階層化されたメニューを表示させます。
// 親メニュー項目 var menu1 = new MenuItem(win, '親メニュー1'); var menu2 = new MenuItem(win, '親メニュー2'); // 子メニュー作成 createMenu(win, menu1); createMenu(win, menu2); // ウィンドウの親メニューに追加 win.menu.add(menu1); win.menu.add(menu2); // さらにメニュー追加 var menu3 = new MenuItem(win, '子メニュー'); menu3.addNew(win, 'ほげ'); menu3.addNew(win, 'ふが'); menu1.add(menu3); // さらにさらにメニュー追加 var menu4 = new MenuItem(win, '孫メニュー'); createMenu(win, menu4); menu3.add(menu4); menu3.addNew(win, 'はにゃ'); // マウスが右クリックされた時のイベント。 // 右クリック:親メニュー2 // SHIFTキー+右クリック:子メニュー // CTRLキー+右クリック:孫メニュー win.onMouseDown = function(x, y, button, shift) { if (button == mbRight) { if (shift & ssShift) { trackPopupMenu(0, x, y, 1, 4); } else if (shift & ssCtrl) { trackPopupMenu(0, x, y, 1, 4, 2); } else { trackPopupMenu(0, x, y, 1); } } };