Window.trackPopupMenu (ポップアップメニュー表示)

  1. 文法
  2. 詳細
  3. 引数
  4. 例外
  5. 戻り値
    1. 表示のみ
    2. 右クリックメニュー
    3. 孫メニュー

1. 文法

メンバ型
関数
メンバ所有者
global.Window インスタンス
呼び出し
instance.trackPopupMenu( flags, x, y, * )

2. 詳細

ポップアップメニューを表示します。指定できるメニューは、当該ウィンドウのメニューに含まれるものだけです。メニューの内容は、MenuItemインスタンスとして予め作成しておく必要があります。

吉里吉里2 2.28以降ではMenuItem.popupメソッドの使用を推奨します。

3. 引数

flags (Integer)
ポップアップメニューの配置方法や動作を指定します。0、または以下のフラグの組み合わせ(ビット論理和)を指定します。
メニュー位置指定フラグ(水平方向)
メニュー水平位置指定
意味
tppfCenterAlign ポップアップメニューの水平方向の中心を、xで指定した座標に合わせます。
tppfLeftAlign ポップアップメニューの左端を、xで指定した座標に合わせます。
tppfRightAlign ポップアップメニューの右端を、xで指定した座標に合わせます。
メニュー位置指定フラグ(垂直方向)
メニュー垂直位置指定
意味
tppfBottomAlign ポップアップメニューの下端を、yで指定した座標に合わせます。
tppfTopAlign ポップアップメニューの上端を、yで指定した座標に合わせます。
tppfVCenterAlign ポップアップメニューの垂直方向の中心を、yで指定した座標に合わせます。
マウスボタンによる選択方法指定フラグ
選択方法指定
意味
tppfLeftButton マウスの左ボタンでのみ、ポップアップメニューの選択を行えます。
tppfRightButton マウスの左と右どちらのボタンでも、ポップアップメニューの選択を行えます。
アニメーション表示方法指定フラグ
アニメーション表示方法指定
意味
tppfNoAnimation アニメーションなしでメニューを表示します。
tppfHorNegAnimation 左から右へ向かってアニメーション表示を行います。
tppfHorPosAnimation 右から左へ向かってアニメーション表示を行います。
tppfVerNegAnimation 下から上へ向かってアニメーション表示を行います。
tppfVerPosAnimation 上から下へ向かってアニメーション表示を行います。
アニメーション表示を行う場合、メニューのアニメーション表示を行うよう、オペレーティングシステム上で設定されている(Windows 2000であれば、「画面のプロパティ」>「効果」>「メニューとヒントをアニメーション化する」がチェックされた状態)必要があります。
x (Integer)
y (Integer)
ポップアップメニューの座標を、ウィンドウのクライアント座標で指定します。
* (Integer) [default: 0]
メニューアイテムのインデックスを指定します。インデックスは0から始まる整数です。非表示状態、無効状態(選択不能)のメニュー項目もインデックスにカウントされます。ここで指定したインデックス位置の子メニューが表示されます。インデックスを複数指定することで、メニューの階層を辿って子メニューを指定することができます。

4. 例外

5. 戻り値

ユーザーが選択したメニュー項目の識別子を返します。ユーザーが何もメニュー項目を選択せずにメニューを取り消した場合や、エラーが発生した場合は0を返します。

6. 例

事前に以下のコードが実行されていることを前提とします。

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

孫メニュー

階層化されたメニューを表示させます。この例では、インデックスが[1]、[1]の[4]、[1]の[4]の[2]の項目が、階層的にメニューになっています。

// 親メニュー項目
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);
    }
  }
};