SWF コンテンツでは、InteractiveObject を継承するオブジェクトの
contextMenu
プロパティにメニューオブジェクトを割り当てることによって、そのオブジェクトにコンテキストメニューを含めることができます。「進む」、「戻る」、「印刷」、「品質」、「ズーム」などのいくつかのコマンドは、デフォルトで組み込まれています。AIR ランタイムでは、
contextMenu
に割り当てることができるメニューオブジェクトのタイプは、NativeMenu または ContextMenu です。Flash Player ランタイムでは、ContextMenu クラスだけを使用できます。
ContextMenu クラスと ContextMenuItem クラスを使用する場合、ネイティブメニューイベントまたはコンテキストメニューイベントをリッスンできます。両方のクラスが送出されます。ContextMenuEvent オブジェクトのプロパティの利点の 1 つは、contextMenuOwner はメニューが関連付けられているオブジェクトを識別し、
mouseTarget
はメニューを開くためにクリックされたオブジェクトを識別する点です。この情報は、NativeMenuEvent オブジェクトからは使用できません。
次の例では、Sprite を作成し、単純な編集コンテキストメニューを追加します。
var sprite:Sprite = new Sprite();
sprite.contextMenu = createContextMenu()
private function createContextMenu():ContextMenu{
var editContextMenu:ContextMenu = new ContextMenu();
var cutItem:ContextMenuItem = new ContextMenuItem("Cut")
cutItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCutCommand);
editContextMenu.customItems.push(cutItem);
var copyItem:ContextMenuItem = new ContextMenuItem("Copy")
copyItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCopyCommand);
editContextMenu.customItems.push(copyItem);
var pasteItem:ContextMenuItem = new ContextMenuItem("Paste")
pasteItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doPasteCommand);
editContextMenu.customItems.push(pasteItem);
return editContextMenu
}
private function doCutCommand(event:ContextMenuEvent):void{trace("cut");}
private function doCopyCommand(event:ContextMenuEvent):void{trace("copy");}
private function doPasteCommand(event:ContextMenuEvent):void{trace("paste");}
注意:
ブラウザー環境で表示される SWF コンテンツとは異なり、AIR のコンテキストメニューにはビルトインコマンドはありません。
Flash Player コンテキストメニューのカスタマイズ
ブラウザーまたはプロジェクターでは、SWF コンテンツのコンテキストメニューに常にビルトインアイテムが含まれます。「設定」および「Flash Player について」コマンド以外のデフォルトのコマンドは、すべてメニューから削除できます。 そうするには、Stage プロパティ
showDefaultContextMenu
を
false
に設定します。
特定の表示オブジェクトに対してカスタマイズしたコンテキストメニューを作成する場合、ContextMenu クラスの新しいインスタンスを作成して
hideBuiltInItems()
メソッドを呼び出し、そのインスタンスを該当の DisplayObject インスタンスの
contextMenu
プロパティに割り当てます。次の例では、動的に描画される四角形に、色をランダムに変更するコンテキストメニューコマンドを設定します。
var square:Sprite = new Sprite();
square.graphics.beginFill(0x000000);
square.graphics.drawRect(0,0,100,100);
square.graphics.endFill();
square.x =
square.y = 10;
addChild(square);
var menuItem:ContextMenuItem = new ContextMenuItem("Change Color");
menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,changeColor);
var customContextMenu:ContextMenu = new ContextMenu();
customContextMenu.hideBuiltInItems();
customContextMenu.customItems.push(menuItem);
square.contextMenu = customContextMenu;
function changeColor(event:ContextMenuEvent):void
{
square.transform.colorTransform = getRandomColor();
}
function getRandomColor():ColorTransform
{
return new ColorTransform(Math.random(), Math.random(), Math.random(),1,(Math.random() * 512) - 255, (Math.random() * 512) -255, (Math.random() * 512) - 255, 0);
}