コンテキストメニューについて
コンテキストメニューとは?
■ コンテキストメニューとは?
右クリックを押したときにポップアップして表示されるメニューをコンテキストメニューといいます。
■ コンテキストメニュークラスを使うと?
コンテキストメニュークラスを使用すると、「設定」以外の項目を非表示にする事ができます。
さらに、カスタムアイテムを使う事で、好きな項目を 最大 15 個まで登録する事が可能です。
さらに、カスタムアイテムを使う事で、好きな項目を 最大 15 個まで登録する事が可能です。
コンテキストメニューを非表示にする
サンプルをダウンロード
■メニュー項目を個別に非表示にする
右クリックしたときにでるコンテキストメニュー自体は非表示にする事はできません。しかし項目の一部を非表示にする事は可能です。
1.コンテキストメニューインスタンスを作成する
ContextMenu クラスを使用すると、メニューを個別に表示と非表示の切り替えが可能となります。
コンテキストメニューを作成
var menu_cm = new ContextMenu ();
2.プロパティを設定する
ContextMenu クラスは以下の表にあるプロパティを保有しています。このプロパティを true にすると表示、 false にすると非表示になります。
| プロパティ | 説明 |
| builtInItems.forwardAndBack | 先送り、戻る |
| builtInItems.loop | ループ再生 |
| builtInItems.play | 再生 |
| builtInItems.print | プリント |
| builtInItems.quality | 画質 |
| builtInItems.rewind | 巻き戻し |
| builtInItems.save | SWF ファイルを保存 (Shockmachine 使用時?) |
| builtInItems.zoom | 拡大、縮小 |
コンテキストメニューにプロパティを設定する
var menu_cm = new ContextMenu ();
menu_cm.builtInItems.forwardAndBack = false; // 先送り、戻る
menu_cm.builtInItems.loop = false; // ループ再生
menu_cm.builtInItems.play = false; // 再生
menu_cm.builtInItems.print = false; // プリント
menu_cm.builtInItems.quality = false; // 画質
menu_cm.builtInItems.rewind = false; // 巻き戻し
menu_cm.builtInItems.zoom = false; // 拡大
また、hideBuiltInItems() メソッドを呼び出すと、上の表にあるプロパティがすべて false となります。
コンテキストメニューのプロパティをすべて false にする
var menu_cm = new ContextMenu ();
menu_cm.hideBuiltInItems();
3.contextMenu に登録する
ムービークリップやテキストフィールドなどの InteractiveObject クラスから派生しているクラスは 、contextMenu プロパティを保有しています。
このcontextMenu プロパティにコンテキストメニューを登録すると、インスタンス上で右クリックを押したときに、設定どおりのコンテキストメニューが表示されます。
Flash画面全体に適用したい場合は、stage や MainTimeline に登録したい所ですが、残念ながらこれらのクラスは contextMenu プロパティを保有していません。「画面全体を描画している」なんらかのインスタンスに登録する必要があります。
画面全体に描画したスプライトに設定する例です。
スプライト上で右クリックを押されたときに動作させる
var menu_cm = new ContextMenu ();
menu_cm.builtInItems.forwardAndBack = false; // 先送り、戻る
menu_cm.builtInItems.loop = false; // ループ再生
menu_cm.builtInItems.play = false; // 再生
menu_cm.builtInItems.print = false; // プリント
menu_cm.builtInItems.quality = false; // 画質
menu_cm.builtInItems.rewind = false; // 巻き戻し
menu_cm.builtInItems.zoom = false; // 拡大
// ダミーのスプライト(Flash全体を矩形で描画)
var shape = new Sprite();
stage.addChild(shape);
shape.graphics.beginFill ( 0xFF0000 , 0.5 );
shape.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
shape.graphics.endFill();
// スプライトにコンテキストメニューを登録
shape.contextMenu = menu_cm;
コンテキストメニューが呼び出されるか調べる
サンプルをダウンロード
1.コンテキストメニューインスタンスを作成する
ContextMenu クラスをインスタンス化します。
コンテキストメニューを作成
var menu_cm = new ContextMenu ();
2.コールバック関数を登録する
ContextMenu クラスの ContextMenuEvent.MENU_SELECT イベントを使用すると、右クリックを押してコンテキストメニューが呼び出される直前に、登録したコールバック関数を呼び出してくれます。
イベントを登録する
var menu_cm = new ContextMenu ();
menu_cm.addEventListener(ContextMenuEvent.MENU_SELECT, function(e){
trace("右クリックが押された");
});
3.contextMenu に登録する
ムービークリップやテキストフィールドなどの InteractiveObject クラスから派生しているクラスは 、contextMenu プロパティを保有しています。
このcontextMenu プロパティにコンテキストメニューを登録すると、インスタンス上で右クリックを押したときに、登録した関数が呼び出されます。
Flash画面全体に適用したい場合は、stage や MainTimeline に登録したい所ですが、残念ながらこれらのクラスは contextMenu プロパティを保有していません。「画面全体を描画している」なんらかのインスタンスに登録する必要があります。
画面全体に描画したスプライトに設定する例です。
スプライト上で右クリックを押されたときに動作させる
var menu_cm = new ContextMenu ();
menu_cm.addEventListener(ContextMenuEvent.MENU_SELECT, function(e){
trace("右クリックが押された");
});
// ダミーのスプライト(Flash全体を矩形で描画)
var shape = new Sprite();
stage.addChild(shape);
shape.graphics.beginFill ( 0xFF0000 , 0.5 );
shape.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
shape.graphics.endFill();
// スプライトにコンテキストメニューを登録
shape.contextMenu = menu_cm;
コンテキストメニューに項目を追加する
サンプルをダウンロード
1.コンテキストメニューアイテムインスタンスを作成する
メニューに項目を追加したい場合は、ContextMenuItem クラスを使用します。第一引数に表示したいキャプション名を指定します。
コンテキストメニューを作成
var menu_item = new ContextMenuItem ("表示テスト");
2.メニューアイテムのプロパティを設定する
ContextMenuItem クラスは、以下の表にあるプロパティを保有しています。各プロパティに必要なパラメータを設定します。
| プロパティ | 説明 |
| caption | 表示する文字を指定(キャプション名) |
| enabled | 通常表示の場合 true 、淡色表示の場合 false |
| separatorBefore | このメニューの1つ上にセパレータ(区切り線)を付ける |
| visible | 表示する場合 true , 非表示にする場合 false |
コンテキストメニューアイテムにプロパティを設定する
var menu_item = new ContextMenuItem(); // メニューアイテムを作成
menu_item.caption = "表示テスト"; // キャプション名
menu_item.enabled = false; // 有効か
menu_item.separatorBefore = false; // 1つ上にセパレータを付ける
menu_item.visible = true; // 可視表示するか
複数の項目を追加したい場合は、その数だけコンテキストメニューアイテムを作成する必要があります。
3.コールバック関数を登録する
ContextMenuItem クラスの ContextMenuEvent.MENU_ITEM_SELECT イベントを使用すると、メニューを選択したときに登録したコールバック関数を呼び出してくれます。
イベントを登録する
var menu_item = new ContextMenuItem(""); // メニューアイテムを作成
menu_item.caption = "表示テスト"; // キャプション名
menu_item.enabled = false; // 有効か
menu_item.separatorBefore = false; // 1つ上にセパレータを付ける
menu_item.visible = true; // 可視表示するか
// 押されたときに呼び出される関数
menu_item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, function(e){
trace("選択された");
});
4.コンテキストメニューを作成する
次に、ContextMenu クラスを使用して、コンテキストメニューインスタンスを作成します。
コンテキストメニューを作成する
var menu_cm = new ContextMenu ();
5.項目を登録する
ContextMenu クラスが持っている customItems プロパティに、コンテキストメニューアイテムを配列に格納して登録します。
カスタムアイテムは最大 15 個のメニューアイテムを登録できます。キャプションの文字数は 100 文字以内である必要があります。同名のキャプションは登録できません。
カスタムアイテムにメニューアイテムを登録する
var menu_item = new ContextMenuItem(""); // メニューアイテムを作成
menu_item.caption = "表示テスト"; // キャプション名
menu_item.enabled = false; // 有効か
menu_item.separatorBefore = false; // 1つ上にセパレータを付けるか
menu_item.visible = true; // 可視表示するか
// 押されたときに呼び出される関数
menu_item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, function(e){
trace("選択された");
});
var menu_cm = new ContextMenu ();
menu_cm.customItems = [menu_item]; // カスタムメニューに登録
下の画像のようなコンテキストメニューを作成したい場合の例です。
3つのメニューアイテムをカスタムアイテムに登録する
var menu_item1 = new ContextMenuItem(""); // メニューアイテムを作成
menu_item1.caption = "アイテム1"; // キャプション名
menu_item1.enabled = true; // 有効か
menu_item1.separatorBefore = false; // 1つ上にセパレータを付けるか
menu_item1.visible = true; // 可視表示するか
menu_item1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, function(e){ // 押されたときに呼び出される関数
trace("アイテム1が選択された");
});
var menu_item2 = new ContextMenuItem(""); // メニューアイテムを作成
menu_item2.caption = "アイテム2"; // キャプション名
menu_item2.enabled = false; // 有効か
menu_item2.separatorBefore = false; // 1つ上にセパレータを付けるか
menu_item2.visible = true; // 可視表示するか
menu_item2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, function(e){ // 押されたときに呼び出される関数
trace("アイテム2が選択された");
});
var menu_item3 = new ContextMenuItem(""); // メニューアイテムを作成
menu_item3.caption = "アイテム3"; // キャプション名
menu_item3.enabled = true; // 有効か
menu_item3.separatorBefore = true; // 1つ上にセパレータを付けるか
menu_item3.visible = true; // 可視表示するか
menu_item3.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, function(e){ // 押されたときに呼び出される関数
trace("アイテム3が選択された");
});
var menu_cm = new ContextMenu ();
menu_cm.hideBuiltInItems();
// カスタムメニューに登録
menu_cm.customItems = [
menu_item1,
menu_item2,
menu_item3
];
// ダミーのスプライト(Flash全体を矩形で描画)
var shape = new Sprite();
stage.addChild(shape);
shape.graphics.beginFill ( 0xFF0000 , 0.5 );
shape.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
shape.graphics.endFill();
// スプライトにコンテキストメニューを登録
shape.contextMenu = menu_cm;
6.contextMenu に登録する
ムービークリップやテキストフィールドなどの InteractiveObject クラスから派生しているクラスは 、contextMenu プロパティを保有しています。
このcontextMenu プロパティにコンテキストメニューを登録すると、インスタンスの上で右クリックを押したときに、登録した関数が呼び出されます。
Flash画面全体に適用したい場合は、stage や MainTimeline に登録したい所ですが、残念ながらこれらのクラスは contextMenu プロパティを保有していません。「画面全体を描画している」なんらかのインスタンスに登録する必要があります。
画面全体に描画したスプライトに設定する例です。
スプライト上で右クリックを押されたときに動作させる
var menu_item = new ContextMenuItem(""); // メニューアイテムを作成
menu_item.caption = "表示テスト"; // キャプション名
menu_item.enabled = false; // 有効か
menu_item.separatorBefore = false; // 1つ上にセパレータを付けるか
menu_item.visible = true; // 可視表示するか
// 押されたときに呼び出される関数
menu_item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, function(e){
trace("選択された");
});
var menu_cm = new ContextMenu ();
menu_cm.customItems = [menu_item]; // カスタムメニューに登録
// ダミーのスプライト(Flash全体を矩形で描画)
var shape = new Sprite();
stage.addChild(shape);
shape.graphics.beginFill ( 0xFF0000 , 0.5 );
shape.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
shape.graphics.endFill();
// スプライトにコンテキストメニューを登録
shape.contextMenu = menu_cm;

