在 SWF 內容中,對於繼承自 InteractiveObject 的任何物件,您都可以藉由將選單物件指定給所繼承物件的
contextMenu
屬性,為所繼承的物件指定快顯選單。選單預設會包含好幾個命令,包括「快轉」、「後退」、「列印」、「品質」和「縮放」。在 AIR 執行階段中,指定給
contextMenu
之選單物件的類型,可以是 NativeMenu 或 ContextMenu。在 Flash Player 執行階段中,只能使用 ContextMenu 類別。
當您使用 ContextMenu 和 ContextMenuItem 類別時,就可以偵聽原生選單事件或快顯選單事件;這兩個事件都會傳送。ContextMenuEvent 物件屬性的其中一個優點是,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 內容中的快顯選單都會有內建項目。除了「設定」和「關於」命令以外,您可以移除選單中所有預設的命令。將 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);
}