ブラウザでダウンロード 動的なメニューはクラスが必要配列を用いて固定的なメニューを作成するのであれば、 定数として初期値を入れる形でも良いのですが、 やはり、クラスとして実装したほうが便利に感じます。 ( ここでは、最低限の機能しか実装していません ) MenuBlock.as
package { // ********************************************************* // メニューのポップアップ単位を // 1ブロックとして構築していくクラス // ********************************************************* public class MenuBlock { public var block:Array = null; public function MenuBlock () { block = new Array(); } // ********************************************************* // 最初に実行して、以後この文字列で識別する // 名称を変更してもいいように、内部識別を作っても良い // ********************************************************* public function addItem( label:String ):void { var obj:Object = new Object(); obj["label"] = label; block.push(obj); } // ********************************************************* // セパレータ // ********************************************************* public function addSep( ):void { var obj:Object = new Object(); obj["type"] = "separator"; block.push(obj); } // ********************************************************* // 階層を作成 // ********************************************************* public function addChild( label:String, mb:MenuBlock ):void { for( var i:int; i < block.length; i++ ) { if ( block[i]["label"] == label ) { block[i]["children"] = mb.block; break; } } } // ********************************************************* // アイコンをセット // ********************************************************* public function setIcon( label:String, icon:Class ):void { for( var i:int; i < block.length; i++ ) { if ( block[i]["label"] == label ) { block[i]["icon"] = icon; break; } } } // ********************************************************* // その他のオプションをセット // ********************************************************* public function setOption( label:String, target:String, value:Object ):void { for( var i:int; i < block.length; i++ ) { if ( block[i]["label"] == label ) { block[i][target] = value; break; } } } } } 以下が使用サンプルです import mx.controls.*; import mx.events.*; import mx.formatters.*; import flash.events.*; include "Parts.as" // 画像の埋め込み include "Icon.as" private var myMenuData:Array; // 配列仕立て private var popupMenu1:Menu; private var save:Object; // このウインドウ private var me:Application = null; // ********************************************************* // アプリケーションの初期化 // ********************************************************* public function initData():void { firebug("処理開始"); me = this; // ***************************************************** // 配列仕立てのポップアップメニュー // ***************************************************** /* myMenuData = [ {label: "ファイル" , icon: icon1, children:[ {label: "開く", enabled: false } ,{label: "保存", userOption: "001" } ,{type: "separator" } ,{label: "オプション" , children:[ {label: "お気に入り", icon: iconFavorites } ,{label: "情報", icon: iconInfoBox } ,{label: "検索", icon: iconSearch } ]} ]} , {label: "背景処理" , icon: icon2, children:[ {label: "背景変更", type: "check", toggled: true } ,{type: "separator" } ,{label: "ここを動的に変更", type: "check", toggled: true } ]} , {label: "予備", icon: icon3 } ]; */ // 一番深い階層 var mb1:MenuBlock = new MenuBlock(); mb1.addItem("お気に入り"); mb1.setIcon("お気に入り",iconFavorites); mb1.addItem("情報"); mb1.setIcon("情報",iconInfoBox); mb1.addItem("検索"); mb1.setIcon("検索",iconSearch); // 2番目の階層( A ) var mb2A:MenuBlock = new MenuBlock(); mb2A.addItem("開く"); mb2A.setOption("開く","enabled", false ); mb2A.addItem("保存"); mb2A.setOption("保存","userOption", "001" ); mb2A.addSep(); mb2A.addItem("オプション"); mb2A.addChild("オプション",mb1); // 一番深い階層をリンク // 2番目の階層( B ) var mb2B:MenuBlock = new MenuBlock(); mb2B.addItem("背景変更"); mb2B.setOption("背景変更","type", "check"); mb2B.setOption("背景変更","toggled", true); mb2B.addSep(); mb2B.addItem("ここを動的に変更"); mb2B.setOption("ここを動的に変更","check", true); // 一番上の階層 var mb3:MenuBlock = new MenuBlock(); mb3.addItem("ファイル"); mb3.setIcon("ファイル",icon1); mb3.addChild("ファイル",mb2A); // 下位階層をリンク mb3.addItem("背景処理"); mb3.setIcon("背景処理",icon2); mb3.addChild("背景処理",mb2B); // 下位階層をリンク mb3.addItem("予備"); mb3.setIcon("予備",icon3); mb2B.addItem("あとから追加"); popupMenu1 = Menu.createMenu( null, mb3.block, false); // 表示する内容を対応させる popupMenu1.labelField = "label"; popupMenu1.iconField = "icon"; // イベントを登録 popupMenu1.addEventListener("itemClick", clickMenuHandler); popupMenu1.addEventListener("itemRollOver", menuItemRollOver); popupMenu1.addEventListener("menuShow", popupMenuCheck); popupMenu1.setStyle( "backgroundColor", "0x000000" ); popupMenu1.setStyle("backgroundAlpha","0.2"); popupMenu1.setStyle("backgroundImage", imgMenuBackSmile ); popupMenu1.setStyle("backgroundSize","100%"); } // ********************************************************* // creationComplete // ********************************************************* private function initApp1():void { } // ********************************************************* // itemClick // ********************************************************* private function clickMenuHandler(e:MenuEvent):void { } // ********************************************************* // itemRollOver // e.menu : マウスの下のメニュー // ********************************************************* private function menuItemRollOver(e:mx.events.MenuEvent ):void { } // ********************************************************* // menuShow // サブメニューが開かれた // e.menu : 開かれたメニュー // ********************************************************* private function popupMenuCheck(e:mx.events.MenuEvent ):void { } |