右クリックメニューを変更する
Windows の右クリック(Mac では Ctrl + クリック)で表示されるメニューを変更するには ContextMenu クラスを用います。
API
サンプルソース
とりあえず最低限のソースを貼り付け。ここではメニュー選択時(例えば、『コピー』というメニューをクリックしたとき)にイベントを発生させています。右クリックされたときのイベントを拾う事もできるので、 API で確認してみてください。
ポイントは ContextMenu を作成した後で this.contextMenu = myContextMenu のように設定してあげないと登録されない点。
// 当たり前ですが、パッケージ名は各々変更して下さい package jp.ne.sakura.hl2.MyComp { // これらが(ほぼ)必須のライブラリ import flash.events.ContextMenuEvent; import flash.ui.ContextMenu; import flash.ui.ContextMenuBuiltInItems; import flash.ui.ContextMenuItem; // 以下は必須ではない import mx.controls.Alert; import mx.controls.TextArea; public class ExTextArea extends TextArea { private var myContextMenu:ContextMenu; private var menuLabel:String = "押す"; public function ExTextArea() { super(); // 右クリックメニューの初期化 myContextMenu = new ContextMenu(); // デフォルトの右クリックメニューを削除 myContextMenu.hideBuiltInItems(); // hideBuiltInItems はデフォルトのメソッド // カスタムした右クリックメニューを登録 addCustomMenuItems(); // 右クリックメニューを登録 this.contextMenu = myContextMenu; } // カスタムした右クリックメニューを登録 private function addCustomMenuItems():void { var item:ContextMenuItem = new ContextMenuItem(menuLabel); myContextMenu.customItems.push(item); // customItems はデフォルトで存在するメンバ item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler); } // 右クリックメニューの選択時イベント private function menuItemSelectHandler(event:ContextMenuEvent):void { Alert.show("ゆっくりしていってね!!!"); // とりあえず Alert を出してみる } } }
仕様
TextArea のメニューは削除できなかったり、制約も存在します。API にも書いてありますが、使用時には注意して下さい。
ちょっとくわしい解説
例えば、最初から存在する右クリックメニュー(これが ContextMenuBuiltInItems)の一部だけを隠したい場合などは、個別に設定する事も可能です。
上の例で言うと、こんな感じ。
// builtInItems を取得しておく(コードの可読性のため) var defaultItems:ContextMenuBuiltInItems = myContextMenu.builtInItems; // クオリティ操作とプリントのメニューだけを隠す defaultItems.quality = false; defaultItems.print = false;