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