套件 | flash.ui |
類別 | public final class ContextMenu |
繼承 | ContextMenu NativeMenu EventDispatcher Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
行動裝置瀏覽器支援:行動裝置瀏覽器不支援此類別。
AIR 描述檔支援:行動裝置或 AIR for TV 裝置不支援此功能。如需有關跨多個描述檔之 API 支援的詳細資訊,請參閱 AIR 描述檔支援。
在 Flash Player 中,使用者可以按一下滑鼠右鍵 (Windows 或 Linux) 或 Control+按一下 (Macintosh) 開啟快顯選單。您可使用 ContextMenu 類別的方法和屬性來新增自訂的選單項目、控制內建快顯選單項目的顯示 (例如,「放大顯示」和「列印」) 或建立選單的副本。在 AIR 中並沒有內建項目,也未提供標準快顯選單。
在 Flash Professional 中,您可將 ContextMenu 物件附加到特定的按鈕、影片片段、文字欄位物件或附加到整個影片的層級。使用 InteractiveObject 類別的 contextMenu
屬性來做到這點。
在 Flex 或 Flash Builder 中,只有應用程式的最上層組件可以有快顯選單。例如,如果 DataGrid 控制項是 TabNavigator 或 VBox 容器的子系,則 DataGrid 控制項無法擁有它自己的快顯選單。
若要將新的項目加入 ContextMenu 物件中,請先建立 ContextMenu 物件,然後將該物件加入 ContextMenu.customItems
陣列。 如需有關建立快顯選單項目的詳細資訊,請參閱 ContextMenuItem 類別項目。
Flash Player 有三種快顯選單的類型: 標準選單 (會在 Flash Player 中按滑鼠右鍵時出現)、編輯選單 (會在可選取或可編輯的文字欄位上方按一下滑鼠右鍵時出現),以及錯誤選單 (會在 SWF 檔載入至 Flash Player 失敗時出現)。 只有標準選單和編輯選單才能使用 ContextMenu 類別來修改。AIR 僅提供編輯選單。
自訂選單的項目永遠會出現在 Flash Player 快顯選單的最上方,並且會在所有可見的內建選單項目上方;可用分隔列來區別內建和自訂的選單項目。您無法從快顯選單中移除「設定」選單項目。 Flash 需要「設定」選單項目,以便讓使用者存取影響其電腦上私用與儲存方面的設定。 您也無法從快顯選單移除「關於」選單,這個必要的選單可讓使用者找出目前使用的 Flash Player 版本資訊 (AIR 並無內建「設定」與「關於」選單項目)。
在 Flash Player 的快顯選單中,最多只能加入 15 個自訂項目。AIR 則未明確限制快顯選單的項目個數。
在呼叫 ContextMenu 物件的方法以前,您必須先使用 ContextMenu()
建構函式來建立該物件。
相關 API 元素
屬性 | 定義自 | ||
---|---|---|---|
builtInItems : ContextMenuBuiltInItems
具有下列屬性的 ContextMenuBuiltInItems 類別實體:forwardAndBack、loop、play、print、quality、rewind、save 和 zoom。 | ContextMenu | ||
clipboardItems : ContextMenuClipboardItems
具有下列屬性的 ContextMenuClipboardItems 類別實體:cut、copy、paste、delete、selectAll。 | ContextMenu | ||
clipboardMenu : Boolean
指定是否應該使用剪貼簿選單。 | ContextMenu | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
customItems : Array
ContextMenuItem 物件的陣列。 | ContextMenu | ||
isSupported : Boolean [靜態] [唯讀]
如果目前的平台支援 ContextMenu 類別,則 isSupported 屬性會設為 true,否則會設為 false。 | ContextMenu | ||
items : Array [覆寫]
此選單中的自訂項目陣列。 | ContextMenu | ||
link : URLRequest
連結的 URLRequest。 | ContextMenu | ||
numItems : int [覆寫] [唯讀]
此選單中的項目數目。 | ContextMenu | ||
parent : NativeMenu [唯讀]
父選單。 | NativeMenu |
方法 | 定義自 | ||
---|---|---|---|
會建立 ContextMenu 物件。 | ContextMenu | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式,以便讓偵聽程式收到事件的通知。 | EventDispatcher | ||
將選單項目加入至選單底部。 | NativeMenu | ||
[覆寫]
將選單項目加入至選單底部。 | ContextMenu | ||
插入新的選單項目以便將子選單加入至選單。 | NativeMenu | ||
將新的選單項目插入指定位置,以便將子選單加入選單。 | NativeMenu | ||
[覆寫]
建立指定之 ContextMenu 物件的副本。 | ContextMenu | ||
[覆寫]
報告此選單是否包含指定的選單項目。 | ContextMenu | ||
會將事件傳送到事件流程。 | EventDispatcher | ||
[覆寫]
在指定位置彈出此選單。 | ContextMenu | ||
[覆寫]
取得指定索引位置的選單項目。 | ContextMenu | ||
取得指定名稱的選單項目。 | NativeMenu | ||
[覆寫]
取得指定項目的位置。 | ContextMenu | ||
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 | EventDispatcher | ||
指出物件是否有已定義的指定屬性。 | Object | ||
會將指定之 ContextMenu 物件中所有的內建選單項目隱藏起來 (「設定」除外)。 | ContextMenu | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
[覆寫]
移除選單的所有項目。 | ContextMenu | ||
會從 EventDispatcher 物件移除偵聽程式。 | EventDispatcher | ||
移除特定選單項目。 | NativeMenu | ||
[覆寫]
移除並傳回位於指定索引位置的選單項目。 | ContextMenu | ||
將選單項目移至指定位置。 | NativeMenu | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object | ||
檢查此 EventDispatcher 物件是否已註冊事件偵聽程式,或者此物件的任何祖系已為特定事件類型註冊事件偵聽程式。 | EventDispatcher |
事件 | 摘要 | 定義自 | ||
---|---|---|---|---|
[廣播事件] 當 Flash Player 或 AIR 應用程式取得作業系統焦點並成為作用中時傳送。 | EventDispatcher | |||
[廣播事件] 當 Flash Player 或 AIR 應用程式失去作業系統焦點並成為非作用中時傳送。 | EventDispatcher | |||
在顯示選單之前,由此 NativeMenu 物件立即傳送。 | NativeMenu | |||
會在使用者第一次產生快顯選單,但是在快顯選單的內容顯示之前傳送。 | ContextMenu | |||
在按下對等按鍵但尚未顯示選單之前,會由 NativeMenu 物件傳送。 | NativeMenu | |||
在選取了所屬的任何一個選單項目或是所屬子選單後代 (任何一個) 中的某個項目時,由此 NativeMenu 物件傳送。 | NativeMenu |
builtInItems | 屬性 |
builtInItems:ContextMenuBuiltInItems
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
具有下列屬性的 ContextMenuBuiltInItems 類別實體:forwardAndBack
、loop
、play
、print
、quality
、rewind
、save
和 zoom
。將這些屬性設定為 false
,便會從指定的 ContextMenu 物件中移除對應的選單項目。 這些屬性是可列舉的,且預設會設定為 true
。
注意:AIR 中的快顯選單不具有內建項目。
實作
public function get builtInItems():ContextMenuBuiltInItems
public function set builtInItems(value:ContextMenuBuiltInItems):void
相關 API 元素
clipboardItems | 屬性 |
clipboardItems:ContextMenuClipboardItems
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
具有下列屬性的 ContextMenuClipboardItems 類別實體:cut
、copy
、paste
、delete
、selectAll
。將其中一個屬性設定為 false
會停用剪貼簿選單中的對應項目。
實作
public function get clipboardItems():ContextMenuClipboardItems
public function set clipboardItems(value:ContextMenuClipboardItems):void
相關 API 元素
範例 ( 如何使用本範例 )
ContextMenu
物件之 clipboardItems
屬性的用法。建立 ContextMenu
並將其 clipboardMenu
屬性設定為 true
。加入 MENU_SELECT
(通常是按一下右鍵) 事件的事件處理常式,並將選單指定給顯示物件。在這種情況下,copy
和 paste
選單會啟用。
package { import flash.ui.ContextMenu; import flash.events.ContextMenuEvent; import flash.display.Sprite; public class ContextMenuClipboardItemsExample extends Sprite { public function ContextMenuClipboardItemsExample() { var myContextMenu:ContextMenu = new ContextMenu(); myContextMenu.clipboardMenu = true; myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler); var rc:Sprite = new Sprite(); rc.graphics.beginFill(0xDDDDDD); rc.graphics.drawRect(0,0,100,30); addChild(rc); rc.contextMenu = myContextMenu; } function menuSelectHandler(event:ContextMenuEvent):void { event.contextMenuOwner.contextMenu.clipboardItems.copy = true; event.contextMenuOwner.contextMenu.clipboardItems.paste = true; } } }
clipboardMenu | 屬性 |
customItems | 屬性 |
customItems:Array
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
ContextMenuItem 物件的陣列。 陣列中的每個物件都代表一個您所定義的快顯選單項目。 請使用這個屬性來新增、移除或修改這些自訂選單項目。
若要加入新的選單項目,您要建立 ContextMenuItem 物件,然後將其加入 customItems
陣列 (例如,使用 Array.push()
)。 如需有關建立選單項目的詳細資訊,請參閱 ContextMenuItem 類別項目。
實作
public function get customItems():Array
public function set customItems(value:Array):void
相關 API 元素
isSupported | 屬性 |
items | 屬性 |
link | 屬性 |
link:URLRequest
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
連結的 URLRequest
。如果這個屬性為 null
,就會顯示一般快顯選單。如果這個屬性不是 null
,就會顯示連結快顯選單,而且將會在指定的 url 上運作。
如果指定了 link
,則會忽略 clipboardMenu
屬性。
預設值為 null
。
實作
public function get link():URLRequest
public function set link(value:URLRequest):void
numItems | 屬性 |
ContextMenu | () | 建構函式 |
public function ContextMenu()
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
會建立 ContextMenu 物件。
相關 API 元素
addItemAt | () | 方法 |
override public function addItemAt(item:NativeMenuItem, index:int):NativeMenuItem
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0 |
將選單項目加入至選單底部。
建立快顯選單時,您可以加入 NativeMenuItem 或 ContextMenuItem 物件。不過,建議整個快顯選單只用一種物件類型,以確保選單中的所有項目具有相同的屬性。
參數
item:NativeMenuItem — 要加入選單底端的項目。
| |
index:int |
NativeMenuItem |
擲回值
ArgumentError — 如果 item 為 null 。
| |
ArgumentError — 如果 item 是另一個選單的成員。
|
clone | () | 方法 |
override public function clone():NativeMenu
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
建立指定之 ContextMenu 物件的副本。副本會繼承原始選單物件的所有屬性。
傳回值NativeMenu — 具有原始選單物件之所有屬性的 ContextMenu 物件。
|
containsItem | () | 方法 |
override public function containsItem(item:NativeMenuItem):Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0 |
報告此選單是否包含指定的選單項目。
參數
item:NativeMenuItem — 要尋找的項目。
|
Boolean — true 表示 item 位於此選單中。
|
display | () | 方法 |
getItemAt | () | 方法 |
override public function getItemAt(index:int):NativeMenuItem
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0 |
取得指定索引位置的選單項目。
參數
index:int — 要傳回之項目的 (從零開始) 位置。
|
NativeMenuItem — 位於選單中指定之位置的項目。
|
擲回值
RangeError — 如果 index 超出此選單之 items 陣列的邊界。
|
getItemIndex | () | 方法 |
override public function getItemIndex(item:NativeMenuItem):int
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0 |
取得指定項目的位置。
參數
item:NativeMenuItem — 要尋找的 NativeMenuItem 物件。
|
int — 此選單中指定之項目的 (從零開始) 位置,如果選單中沒有該項目則為 -1 。
|
hideBuiltInItems | () | 方法 |
public function hideBuiltInItems():void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
會將指定之 ContextMenu 物件中所有的內建選單項目隱藏起來 (「設定」除外)。 如果正在執行 Flash Player 的除錯程式版本,儘管對並未啟用遠端除錯功能的 SWF 檔而言,該選單項目將會變成灰色,但「除錯」選單項目仍會出現。
這個方法只會隱藏出現在標準快顯選單內的選單項目,而不會影響出現在編輯和錯誤選單中的項目。
這個方法的作業方式是將 my_cm
.builtInItems
所有的 Boolean 成員設定為 false
。 您可以選擇性地使內建項目變成可以看見,做法是將其在 my_cm
.builtInItems
中的對應成員設定為 true
。
注意:AIR 中的快顯選單不具有內建項目。呼叫此方法將毫無作用。
相關 API 元素
removeAllItems | () | 方法 |
removeItemAt | () | 方法 |
override public function removeItemAt(index:int):NativeMenuItem
執行階段版本: | AIR 1.0 |
移除並傳回位於指定索引位置的選單項目。
參數
index:int — 要移除之項目的 (從零開始) 位置。
|
NativeMenuItem — 已移除的 NativeMenuItem 物件。
|
menuSelect | 事件 |
flash.events.ContextMenuEvent
屬性 ContextMenuEvent.type =
flash.events.ContextMenuEvent.MENU_SELECT
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
會在使用者第一次產生快顯選單,但是在快顯選單的內容顯示之前傳送。 這讓您的程式能在顯示選單之前,先修改快顯選單項目組。 使用者可以藉由按一下指向裝置的右鍵以產生快顯選單。
定義menuSelect
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
contextMenuOwner | 選單所附加至的顯示清單物件。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
mouseTarget | 使用者在其上按一下右鍵以顯示快顯選單的顯示清單物件。 |
target | 將要顯示的 ContextMenu 物件。 這個 target 並非永遠都是註冊事件偵聽程式之顯示清單中的物件。 請使用 currentTarget 屬性,存取目前正在處理該事件之顯示清單中的物件。 |
ContextMenuExample
類別,從舞台移除預設的快顯選單項目,並加入新的選單項目,當按一下此項目時,會改變舞台上的方形顏色。 您可以使用下列步驟:
- 宣告
myContextMenu
屬性,然後將其指定給新的 ContextMenu 物件,再宣告 Sprite 類型的redRectangle
屬性。 - 會呼叫
removeDefaultItems()
方法,它會移除「列印」以外的所有內建快顯選單項目。 - 會呼叫
addCustomMenuItems()
方法,它會使用 Array 的push()
方法,將名為Red to Black
選單選擇的選單項目放入defaultItems
陣列中。menuItemSelect
事件偵聽程式會加入至 ContextMenuItem 物件,而相關的方法稱為menuItemSelectHandler()
。 每當存取此快顯選單並選取Red to Black
時,這個方法都會使用trace()
將某些陳述式列印出來。 同時移除紅色正方形,並以黑色正方形取代。 - 會加入
menuSelect
類型的事件偵聽程式,連同關聯的方法menuSelectHandler
,每當開啟快顯選單中的項目時,這個方法都會使用trace()
將三個陳述式列印出來。 - 然後
addChildren()
會繪製一個紅色的方形,並將它加入到顯示清單,它就會立刻顯示在此清單中。 - 最後,會將
myContextMenu
指定給redRectangle
Sprite 的快顯選單,如此一來,只有當滑鼠指標放在方形上方時,才會顯示自訂的快顯選單。
package { import flash.ui.ContextMenu; import flash.ui.ContextMenuItem; import flash.ui.ContextMenuBuiltInItems; import flash.events.ContextMenuEvent; import flash.display.Sprite; import flash.display.Shape; import flash.text.TextField; public class ContextMenuExample extends Sprite { private var myContextMenu:ContextMenu; private var menuLabel:String = "Reverse Colors"; private var textLabel:String = "Right Click"; private var redRectangle:Sprite; private var label:TextField; private var size:uint = 100; private var black:uint = 0x000000; private var red:uint = 0xFF0000; public function ContextMenuExample() { myContextMenu = new ContextMenu(); removeDefaultItems(); addCustomMenuItems(); myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler); addChildren(); redRectangle.contextMenu = myContextMenu; } private function addChildren():void { redRectangle = new Sprite(); redRectangle.graphics.beginFill(red); redRectangle.graphics.drawRect(0, 0, size, size); addChild(redRectangle); redRectangle.x = size; redRectangle.y = size; label = createLabel(); redRectangle.addChild(label); } private function removeDefaultItems():void { myContextMenu.hideBuiltInItems(); var defaultItems:ContextMenuBuiltInItems = myContextMenu.builtInItems; defaultItems.print = true; } private function addCustomMenuItems():void { var item:ContextMenuItem = new ContextMenuItem(menuLabel); myContextMenu.customItems.push(item); item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler); } private function menuSelectHandler(event:ContextMenuEvent):void { trace("menuSelectHandler: " + event); } private function menuItemSelectHandler(event:ContextMenuEvent):void { trace("menuItemSelectHandler: " + event); var textColor:uint = (label.textColor == black) ? red : black; var bgColor:uint = (label.textColor == black) ? black : red; redRectangle.graphics.clear(); redRectangle.graphics.beginFill(bgColor); redRectangle.graphics.drawRect(0, 0, size, size); label.textColor = textColor; } private function createLabel():TextField { var txtField:TextField = new TextField(); txtField.text = textLabel; return txtField; } } }
Tue Jun 12 2018, 03:47 PM Z