右クリックメニューの項目を追加する

(サンプル一覧を表示する)

FlashDevelop を使って、右クリックメニューの項目を追加するテストをしてみました。

あまり Flash では右クリックメニューを使いませんが、
使えると便利な場面もあると思います。

最大、15 個まで追加できるそうです。
チェックボックスを付けるとか、2 段構成のメニューにするとかはできません。

Flash 標準メニューの、「設定」と、「Flash Player ** について」という項目は
非表示にすることができません。
Flash の実行画面
右クリックメニューの項目を追加する

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

右クリックメニューの項目を追加する

ソースコード

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.ContextMenuEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.ui.ContextMenu;
	import flash.ui.ContextMenuItem;

	/**
	 * 右クリックメニューに項目を追加するサンプル
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * 右クリックメニュー (コンテキストメニュー)
		 */
		private var myContextMenu:ContextMenu;
		
		/**
		 * 結果表示用テキストフィールド
		 */
		private var textField:TextField;
		
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化イベント
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// 右クリックメニューを作成
			myContextMenu = new ContextMenu();
			
			// 標準アイテムを非表示にする
			myContextMenu.hideBuiltInItems();
			
			// 項目を追加する
			addContextMenuItem("項目 1", onMenuItemSelect);
			addContextMenuItem("項目 2", onMenuItemSelect);
			addContextMenuItem("項目 3", onMenuItemSelect);
			addContextMenuItem("項目 4", onMenuItemSelect, true);
			
			// 右クリックメニューを置き換える
			contextMenu = myContextMenu;
			
			// テキストフィールドの準備
			textField = new TextField();
			with (textField)
			{
				autoSize = TextFieldAutoSize.LEFT;
				x = 10;
				y = 10;
				text = "右クリックしてください。";
			}
			addChild(textField);
		}
		
		/**
		 * 右クリックメニュー項目を追加して返す
		 * @param	caption		項目の名前
		 * @param	handler		クリックされたときに呼ばれるメソッド
		 * @param	separator	項目の上に境界線を表示する
		 * @return	作成したメニュー項目
		 */
		private function addContextMenuItem(caption:String, handler:Function, separator:Boolean = false):ContextMenuItem
		{
			var menuItem:ContextMenuItem = new ContextMenuItem(caption, separator);
			
			// クリックされた時に呼ばれるメソッドが null 以外の時だけ追加する
			if (handler != null)
			{
				menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, handler);
			}
			
			myContextMenu.customItems.push(menuItem);
			return menuItem;
		}
		
		/**
		 * 右クリックメニューがクリックされた時に呼ばれる
		 * @param	event
		 */
		private function onMenuItemSelect(event:ContextMenuEvent):void
		{
			// event.target は Object 型なので、
			// メニューアイテム型にキャストする
			var menuItem:ContextMenuItem = event.target as ContextMenuItem;
			
			// キャストに失敗すると null が返るので、 null の場合は何もしないで終了
			if (menuItem == null)
				return;
			
			textField.text = menuItem.caption + " が選択されました。";
		}
		
	}
	
}		

外部リンク