您的位置:首页 > 其它

Flex自定义右键菜单

2013-05-14 22:40 369 查看
自定义右键菜单注册类:

项目中新增注册类 RightClickManager,代码如下:
package com.siloon.plugin.rightClick

{

     import flash.display.DisplayObject;

     import flash.display.InteractiveObject;

     import flash.events.ContextMenuEvent;

     import flash.events.MouseEvent;

     import flash.external.ExternalInterface;

    

     import mx.core.Application;

    

     public class RightClickManager

     {

          static private var rightClickTarget:DisplayObject;

        static public const RIGHT_CLICK:String = "rightClick";

        static private const javascript:XML =

        <script>

             <![CDATA[

                  /**

                    *

                    * Copyright 2007

                    *

                    * Paulius Uza

                    * http://www.uza.lt
                    *

                    * Dan Florio

                    * http://www.polygeek.com
                    *

                    * Project website:

                    * http://code.google.com/p/custom-context-menu/
                    *

                    * --

                    * RightClick for Flash Player.

                    * Version 0.6.2

                    *

                    */

                    function(flashObjectId)

                    {                   

                         var RightClick = {

                              /**

                              *  Constructor

                              */

                              init: function (flashObjectId) {

                                   this.FlashObjectID = flashObjectId;

                                   this.Cache = this.FlashObjectID;

                                   if(window.addEventListener){

                                        window.addEventListener("mousedown", this.onGeckoMouse(), true);

                                   } else {

                                        document.getElementById(this.FlashObjectID).parentNode.onmouseup = function() { document.getElementById(RightClick.FlashObjectID).parentNode.releaseCapture(); }

                                        document.oncontextmenu = function(){ if(window.event.srcElement.id == RightClick.FlashObjectID) { return false; } else { RightClick.Cache = "nan"; }}

                                        document.getElementById(this.FlashObjectID).parentNode.onmousedown = RightClick.onIEMouse;

                                   }

                              },

                              /**

                              * GECKO / WEBKIT event overkill

                              * @param {Object} eventObject

                              */

                              killEvents: function(eventObject) {

                                   if(eventObject) {

                                        if (eventObject.stopPropagation) eventObject.stopPropagation();

                                        if (eventObject.preventDefault) eventObject.preventDefault();

                                        if (eventObject.preventCapture) eventObject.preventCapture();

                                           if (eventObject.preventBubble) eventObject.preventBubble();

                                   }

                              },

                              /**

                              * GECKO / WEBKIT call right click

                              * @param {Object} ev

                              */

                              onGeckoMouse: function(ev) {

                                     return function(ev) {

                                  if (ev.button != 0) {

                                        RightClick.killEvents(ev);

                                        if(ev.target.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) {

                                            RightClick.call();

                                        }

                                        RightClick.Cache = ev.target.id;

                                   }

                                }

                              },

                              /**

                              * IE call right click

                              * @param {Object} ev

                              */

                              onIEMouse: function() {

                                     if (event.button > 1) {

                                        if(window.event.srcElement.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) {

                                             RightClick.call();

                                        }

                                        document.getElementById(RightClick.FlashObjectID).parentNode.setCapture();

                                        if(window.event.srcElement.id)

                                        RightClick.Cache = window.event.srcElement.id;

                                   }

                              },

                              /**

                              * Main call to Flash External Interface

                              */

                              call: function() {

                                   document.getElementById(this.FlashObjectID).rightClick();

                              }

                         }

                        

                         RightClick.init(flashObjectId);

                    }

             ]]>

        </script>;

        public function RightClickManager()

        {

            return;

        }

        static public function regist() : Boolean

        {

            if (ExternalInterface.available)

            {

                ExternalInterface.call(javascript, ExternalInterface.objectID);

                ExternalInterface.addCallback("rightClick", dispatchRightClickEvent);

                Application.application.addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler);

            }// end if

            return true;

        }

        static private function mouseOverHandler(event:MouseEvent) : void

        {

               //rightClickTarget = DisplayObject(event.target);

               rightClickTarget = InteractiveObject(event.target);

            return;

        }

        static private function dispatchRightClickEvent() : void

        {

               var event:MouseEvent;

            if (rightClickTarget != null)

            {

                event = new MouseEvent(RIGHT_CLICK, true, false, rightClickTarget.mouseX, rightClickTarget.mouseY);

                    //event = new ContextMenuEvent(RIGHT_CLICK, true, false, rightClickTarget as InteractiveObject, rightClickTarget as InteractiveObject);

                    rightClickTarget.dispatchEvent(event);

            }// end if

            return;

        }

     }

}
 打开自己的Flex工程下的html-template文件夹下的index.template.html文件(右击-Open With-Text Editor),在var params = {};语句的下面添加下面的语句:
params.wmode = "opaque";//屏蔽系统右键菜单的关键

3.  在主程序文件中引入:
 
//初始化

protected function init():void

               {

                    if (!rightClickRegisted) 

                    { 

                         maxNumText.text=rightClickRegisted.toString();

                         RightClickManager.regist(); 

                         rightClickRegisted = true; 

                    }

                    this.addEventListener(RightClickManager.RIGHT_CLICK,rightClickHandler);

                    maxNumText.text+="init";

               }

//创建菜单项

               private function createMenuItems():Array 

               { 

                   

                    var menuItems:Array = new Array();

                   

                   

                   

                    var menuItem:Object;

                   

                    menuItem = new Object; 

                   

                    menuItem.label = '刷新'; //菜单项名称

                   

                    //menuItem.itemIcon = this.menu_SX;//菜单项图标

                   

                    menuItems.push(menuItem);

                   

                    return menuItems; 

                   

               }

              

               //生成右键菜单

              

               private function initMenu():void

               {

                    menu = Menu.createMenu(this, createMenuItems(), false);

                   

                    //menu.iconField="itemIcon";//右键菜单的图标

                   

                    //menu.labelField="label";  //右键菜单的名称

                   

                    menu.variableRowHeight = true;    

                    menu.width=100;

                   

                    menu.addEventListener(MenuEvent.ITEM_CLICK, menuItemSelected);  //右键菜单的事件

                   

                    var point:Point = new Point(mouseX,mouseY); 

                   

                    point = localToGlobal(point);  

                   

                    menu.show(point.x,point.y);  //显示右键菜单

                    maxNumText.text="initMenu";

               }

              

               //删除右键菜单

              

               private function removeMenu():void

                   

               { 

                    if(menu!=null) 

                    { 

                         menu.hide();

                        

                         menu.removeEventListener(MenuEvent.ITEM_CLICK,menuItemSelected); 

                        

                         menu=null; 

                    } 

                    maxNumText.text="removeMenu";

               }

              

               //菜单项点击事件

              

               private function menuItemSelected(event:MenuEvent):void

               {

                   

                    var menuItem:Object = event.menu.selectedItem as Object;

                   

                    //……

                    switch(menuItem.label)

                        

                    {

                         case "刷新":

                              addLine();

                              break;

                         //                         ……

                        

                    }

               }

               private function addLine():void

               {

                    maxNumText.text="addLine";

               }

              

               //控件右击事件

              

               private function rightClickHandler(event:MouseEvent):void

                   

               {

                    //tree_onRightClicked(event);

                    maxNumText.text="rightClickHandler0";

                    removeMenu();

                   

                    initMenu();

                    maxNumText.text="rightClickHandler";

               }
4.完整代码如下:
示例代码文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: