加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex自定义右键菜单

发布时间:2020-12-15 04:20:44 所属栏目:百科 来源:网络整理
导读:自定义右键菜单注册类: 项目中新增注册类?RightClickManager,代码如下: package com.siloon.plugin.rightClick { ???? import flash.display.DisplayObject; ???? import flash.display.InteractiveObject; ???? import flash.events.ContextMenuEvent; ??
  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
    ??????????????????? * 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;
    ??????? }

    ???? }
    }


  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.完整代码如下:
    示例代码文件

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读