- 自定义右键菜单注册类:
项目中新增注册类?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,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.完整代码如下:
示例代码文件
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|