パッケージflash.ui
public final class ContextMenu
継承ContextMenu Inheritance EventDispatcher Inheritance Object

ContextMenu クラスは、Flash Player コンテキストメニューのアイテムのコントロールを提供します。ユーザーは、Flash Player を右クリック (Windows の場合) または Control キーを押したままクリック (Macintosh の場合) してコンテキストメニューを開きます。ContextMenu クラスのメソッドとプロパティを使用すると、カスタムメニューアイテムを追加し、ビルトインコンテキストメニューアイテムの表示 ([拡大]、[プリント] など) を制御し、新しいメニューを作成することができます。

ContextMenu オブジェクトは、特定のボタンやムービークリップ、テキストフィールドオブジェクト、またはムービー全体に関連付けることができます。その際、Button クラス、MovieClip クラス、TextField クラスの menu プロパティを使用します。menu プロパティの詳細については、Button.menu、MovieClip.menu、および TextField.menu を参照してください。

Flex では、アプリケーション内の最上位レベルのコンポーネントだけにコンテキストメニューがあります。たとえば、DataGrid コントロールが TabNavigator コンテナまたは VBox コンテナの子である場合、DataGrid コントロールは独自のコンテキストメニューを持つことができません。

ContextMenu オブジェクトに新しいアイテムを追加するには、ContextMenuItem オブジェクトを作成し、そのオブジェクトを ContextMenu.customItems 配列に追加します。コンテキストメニューアイテムの作成の詳細については、ContextMenuItem クラスを参照してください。

Flash Player には 3 種類のコンテキストメニューがあります。これらは、Flash Player を右クリックしたときに表示される標準メニュー、選択可能テキストフィールドまたは編集可能テキストフィールドを右クリックしたときに表示される編集メニュー、Flash Player への SWF ファイルのロードが失敗したときに表示されるエラーメニューです。ContextMenu クラスで修正できるのは、標準メニューと編集メニューだけです。

カスタムメニューアイテムは、常に Flash Player コンテキストメニューの一番上に、つまり、どの可視ビルトインメニューアイテムよりも上に表示されます。ビルトインメニューアイテムとカスタムメニューアイテムの間にはセパレータが表示されます。コンテキストメニューに追加できるカスタムアイテムは 15 アイテム以内です。コンテキストメニューから [設定] メニューアイテムを削除することはできません。[設定] メニューアイテムは、ユーザーがプライバシーやコンピュータの記憶領域に作用する設定にアクセスできるようにするための、Flash に必須のメニューアイテムです。また、使用している Flash Player のバージョンをユーザーが確認するために必要な [Macromedia Flash Player 8 について] メニューアイテムも削除できません。

ContextMenu オブジェクトのメソッドを呼び出す前に、ContextMenu() コンストラクタを使用して ContextMenu オブジェクトを作成する必要があります。

例の表示

関連項目

ContextMenuItem class
flash.display.InteractiveObject.contextMenu


パブリックプロパティ
 プロパティ定義
  builtInItems : ContextMenuBuiltInItems
ContextMenuBuiltInItems クラスの次のブール型プロパティを持つオブジェクトです。forwardAndBackloopplayprintqualityrewindsave、および zoom
ContextMenu
 Inheritedconstructor : Object
特定のオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
Object
  customItems : Array
ContextMenuItem オブジェクトの配列です。
ContextMenu
 Inheritedprototype : Object
[static] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
Object
パブリックメソッド
 メソッド定義
  ContextMenu()
ContextMenu オブジェクトを作成します。
ContextMenu
 InheritedaddEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。
EventDispatcher
  clone():ContextMenu
指定された ContextMenu オブジェクトのコピーを作成します。
ContextMenu
 InheriteddispatchEvent(event:Event):Boolean
イベントをイベントフローに送出します。
EventDispatcher
 InheritedhasEventListener(type:String):Boolean
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。
EventDispatcher
 InheritedhasOwnProperty(name:String):Boolean
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
Object
  hideBuiltInItems():void
[設定] を除き、指定された ContextMenu オブジェクト内のすべてのビルトインメニューアイテムを非表示にします。
ContextMenu
 InheritedisPrototypeOf(theClass:Object):Boolean
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
Object
 InheritedpropertyIsEnumerable(name:String):Boolean
指定されたプロパティが存在し、列挙可能かどうかを示します。
Object
 InheritedremoveEventListener(type:String, listener:Function, useCapture:Boolean = false):void
EventDispatcher オブジェクトからリスナーを削除します。
EventDispatcher
 InheritedsetPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
ループ処理に対するダイナミックプロパティの可用性を設定します。
Object
 InheritedtoString():String
指定されたオブジェクトのストリング表現を返します。
Object
 InheritedvalueOf():Object
指定されたオブジェクトのプリミティブ値を返します。
Object
 InheritedwillTrigger(type:String):Boolean
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。
EventDispatcher
イベント
 イベント一覧定義
  menuSelect ユーザーが最初にコンテキストメニューを生成したときに、コンテキストメニューの内容が表示される前に送出されます。ContextMenu
プロパティの詳細
builtInItemsプロパティ
builtInItems:ContextMenuBuiltInItems  [read-write]

ContextMenuBuiltInItems クラスの次のブール型プロパティを持つオブジェクトです。forwardAndBackloopplayprintqualityrewindsave、および zoom。これらのプロパティを false に設定すると、対応するメニューアイテムが、指定した ContextMenu オブジェクトから削除されます。これらのプロパティは列挙することができ、デフォルトでは true に設定されています。

実装
    public function get builtInItems():ContextMenuBuiltInItems
    public function set builtInItems(value:ContextMenuBuiltInItems):void

関連項目

customItemsプロパティ 
customItems:Array  [read-write]

ContextMenuItem オブジェクトの配列です。配列内の各オブジェクトは、定義したカスタムコンテキストメニューアイテムを表します。このプロパティを使用して、これらのカスタムメニューアイテムを追加、削除、変更することができます。

新しいメニューアイテムを追加するには、ContextMenuItem オブジェクトを作成します。次に Array.push() などを使用して、作成したオブジェクトを customItems 配列に追加します。メニューアイテムの作成の詳細については、ContextMenuItem クラスを参照してください。

実装
    public function get customItems():Array
    public function set customItems(value:Array):void

関連項目

コンストラクタの詳細
ContextMenu()コンストラクタ
public 関数 ContextMenu()

ContextMenu オブジェクトを作成します。

関連項目

メソッドの詳細
clone()メソッド
public function clone():ContextMenu

指定された ContextMenu オブジェクトのコピーを作成します。コピーとして作成されたオブジェクトは、元のメニューオブジェクトのすべてのプロパティを継承します。

戻り値
ContextMenu — 元のメニューオブジェクトのすべてのプロパティを持つ ContextMenu オブジェクトです。
hideBuiltInItems()メソッド 
public function hideBuiltInItems():void

[設定] を除き、指定された ContextMenu オブジェクト内のすべてのビルトインメニューアイテムを非表示にします。デバッグ版の Flash Player が実行されている場合、デバッグのメニューアイテムは表示されますが、リモートデバッグが有効化されていない SWF ファイルについてはグレー表示されます。

このメソッドは、標準コンテキストメニューに表示されるメニューアイテムだけを非表示にします。編集メニューおよびエラーメニューに表示されるメニューアイテムには影響しません。

このメソッドは、my_cm.builtInItems のすべてのブール型プロパティを false に設定することにより機能します。ビルトインアイテムを個別に表示するには、my_cm.builtInItems のそのアイテムに対応するメンバーを true に設定します。

関連項目

イベントの詳細
menuSelectevent 
イベントオブジェクトの型: flash.events.ContextMenuEvent
ContextMenuEvent.type property = flash.events.ContextMenuEvent.MENU_SELECT

ユーザーが最初にコンテキストメニューを生成したときに、コンテキストメニューの内容が表示される前に送出されます。これにより、コンテキストメニューを表示する前に、プログラムによってコンテキストメニューアイテムのセットを変更できます。ユーザーは、ポインティングデバイスを右クリックすることにより、コンテキストメニューを生成します。

menuSelect イベントオブジェクトの type プロパティの値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
contextMenuOwnerメニューが関連付けられる表示リストオブジェクトです。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
mouseTargetユーザーがコンテキストメニューを表示するために右クリックした表示リストオブジェクトです。
target表示される ContextMenu オブジェクトです。target は、必ずしもイベントリスナーを登録した表示リスト内のオブジェクトとは限りません。現在イベントを処理している表示リスト内のオブジェクトにアクセスするには、currentTarget プロパティを使用します。

次の例では、クラス ContextMenuExample を使用して、デフォルトのコンテキストメニューアイテムをステージから削除し、新しいメニューアイテムを追加します。新しいメニューアイテムを クリックすると、ステージ上の四角形の色が変更されます。 ここでは次の手順を 実行します。
  1. プロパティ myContextMenu が宣言され、新しい ContextMenu オブジェクトに割り当てられ、Sprite 型のプロパティ redRectangle が宣言されます。
  2. メソッド removeDefaultItems() が呼び出されます。このメソッドによって、すべてのビルトインコンテキスト メニューアイテムが削除されます。ただし、プリントを除きます。
  3. メソッド addCustomMenuItems() が呼び出されます。このメソッドによって、 Red to Black メニュー選択という名前のアイテムが defaultItems 配列に配置されます。配列の push() メソッドが使用されます。menuItemSelect イベントリスナーが ContextMenuItem オブジェクトに追加され、関連付けられるメソッドは menuItemSelectHandler() という名前です。 このメソッドは trace() を使用して、 コンテキストメニューがアクセスされて Red to Black が選択されるたびに、いくつかのステートメントを出力します。また、赤い四角形は 削除されて黒色の四角形に置換されます。
  4. タイプが menuSelect のイベントリスナーが、 関連するメソッド menuSelectHandler と共に追加されます。このメソッドは、 trace() を使用して、コンテキストメニューのアイテムが開かれるたびに、3 つのステートメントを単純に出力します。
  5. 次に、addChildren() は、赤色の四角形を描画し、それを 表示リストに追加します。この四角形は、表示リストに即座に表示されます。
  6. 最後に、myContextMenuredRectangle スプライトのコンテキストメニューに割り当てられます。 このため、カスタムコンテキストメニューが表示されるのは、マウスポインタが四角形の上にある場合のみです。
package {
    import flash.ui.ContextMenu;
    import flash.ui.ContextMenuItem;
    import flash.ui.ContextMenuBuiltInItems;
    import flash.events.ContextMenuEvent;
    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;
        }
    }
}