Flex自定义右键菜单

Flex中实现自定义右键菜单的教程与资源 本文还有配套的精品资源,点击获取 简介:Flex框架是Adobe公司用于构建RIA应用的工具,特别适用于创建交互式用户界面。本压缩包包含资源,旨在指导用户如何在Flex应用中添加和自定义右键菜单功能。涵盖了创建ContextMenu对象、添加菜单项、监听事件和将菜单关联到Flex组件的步骤,以及提供了一个完整的演示项目。 1. Flex框架简介 Flex是一... 阅读详情
  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, 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.完整代码如下:
    示例代码文件
flex右键菜单RightClickManager 非Application也可以弹出 flex两种右键菜单,RightClickManager修改后在非Application下也可以弹出来。 立即下载

相关推荐

flex实现右键菜单

NULL 博文链接:https://mirabelle1211.iteye.com/blog/961255

flex RightClickManager 用法

1、到http://rightclickmanager.googlecode.com中下载RightClickManager类文件添入flex项目2、修改(项目名).template.html模版文件,在AC_FL_RunContent函数调用中添加"wmode", "opaque",参数3、并在注册事件之前执行RightClickManager.regist();4、注册事件addEventLi...

iteye_9437的博客 227

flex 自定义右键菜单 多级右键菜单

flex 自定义右键菜单 多级右键菜单flex 自定义右键菜单 多级右键菜单flex 自定义右键菜单 多级右键菜单

Flex下的右键菜单问题汇总

Flex下的右键菜单

技术杂货铺 975

FLEX 完全屏蔽系统默认右键菜单,实现自定义菜单

完全屏蔽flex自带的右键菜单,实现自定义右键菜单,附件有完整可运行的例子。 这个问题折腾了一天多,在网上搜了很多资料,几乎都是一样的,转来转去,且讲的不明不白。这里我提供了可运行的全部代码,让你轻松搞定头疼已久的问题。 具体原理我就不说了,网上说得太多,我也不很懂。下面说出关键步骤: 1. 在index-template.html文件中加入params.wmode = "opaque"; 2. 将下载来的RightClickManager类放如你的工程。 3. 在mxml文件中加入[Event(name="rightClick",type="flash.events.ContextMenuEvent")] [Event(name="rightClick",type="flash.events.ContextMenuEvent")]等。 如有问题请QQ我,54305792

基于GIS的生态安全网络格局构建(附练习数据下载)

基于GIS的生态安全网络格局构建(附练习数据下载)

qq_43173805的博客 3124

flex右键菜单

例子1、import flash.ui.ContextMenu;import flash.ui.ContextMenuItem;import flash.events.ContextMenuEvent;// 为鼠标右键添加关闭当前浏览器窗口的菜单var contextMenu : ContextMenu = new ContextMenu();contextMenu.hideBuiltInIt

待定的专栏 4563

基于ROS与Gazebo的多机器人三角形编队仿真实践

本文详细介绍了基于ROS与Gazebo的多机器人三角形编队仿真实践,从环境搭建到编队控制的全过程。通过TurtleBot3机器人模型和TF坐标系系统,实现三个机器人的三角形编队控制,适用于机器人协同作业与编队算法研究。

weixin_29313817的博客 187

flex自定义右键菜单

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applica

Just Code 934

水文模型新手必看:用SWAT-CUP做参数率定,如何正确设置预热期、率定期和验证期?(附数据准备避坑指南)

本文详细介绍了使用SWAT-CUP进行水文模型参数率定的完整流程,重点解析了预热期、率定期和验证期的正确设置方法,并提供了数据准备的避坑指南。通过实操步骤和常见问题解决方案,帮助新手快速掌握SWAT-CUP参数率定的核心技巧,提升水文模型模拟精度。

weixin_26875109的博客 375

利用Ghidra与SVD插件实现STM32固件深度逆向分析

本文详细介绍了如何利用Ghidra逆向工程框架结合SVD插件,实现对STM32固件(.bin文件)的深度逆向分析。通过加载描述芯片外设寄存器的SVD文件,Ghidra能将晦涩的硬件地址操作转换为可读的寄存器符号,极大提升了对嵌入式固件中通信协议、安全校验等关键逻辑的分析效率。文章涵盖了从Java环境搭建、工具配置到实战逆向解析的完整流程。

peach的博客 945

Flex屏蔽并自定义鼠标右键菜单(转载)

http://www.cnblogs.com/wuhenke/archive/2010/01/29/1659353.html 通过ContextMenu hideBuiltInItems,如API所说,无法去除剪贴板选项。 Google Code上有一个RightClickManager的项目。通过JavaScript与ActionScript的结合,屏蔽了右键,并调用actions...

arodevuw971002的博客 172

使用项目管理画布启动项目

许多人对商业模式画布并不陌生,它是亚历山大·奥斯特瓦德(Alexander Osterwalder)、伊夫·皮尼厄(Yves Pigneur)在《商业模式新生代》(Business Model Generation)中提出的一种用来描述商业模式、可视化商业模式、评估商业模式以及改变商业模式的通用语言。 在我们做敏捷软件项目inception(项目启动规划)的时候经常会用到商业画布,此时它的作用是帮助我们快速了解客户的业务、产品和市场,帮助客户梳理自己的资源、优势和盈利模式,总的来说,商业画布是一种简单实用的

IDEAL Garden 1224

Flex4中添加自定义右键菜单

下面这个例子给Flex的右键添加一个自定义的菜单,并且在点击菜单内容时,执行事件 1 var copyrightMenuItem:ContextMenuItem = new ContextMenuItem("菜单内容", true, true); 1 2 3 4

u010395804的专栏 1231

GPU 运维实战:H100/H800/B300 换卡与压测

(烧多久、看什么、什么算合格)。文末还给了一个能直接跑的验收判定脚本,三个真实场景的裁决输出都在。

老韩的Linux云计算架构师进阶之路 278

Python从0到100(二):Python语言介绍及第一个Pyhon程序

Python从0到100(二):Python语言介绍及第一个Pyhon程序。与C和Java比,Python的学习成本和难度曲线不是低一点,更适合新手入门,自底向上的技术攀爬路线。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 5440

Flex4自定义右键菜单

Flex4自定义右键菜单   (2011-01-26 12:03:34) 转载▼ 标签:  flex   自定义   右键   菜单   tree   图标 分类: Flex 注:本文参考了以下文章,经修改完成 http://leopard0825.iteye.com/blog/

蓝叶菱的专栏 1011

使用 IMDb API 获取电影评分和评论的 Python 爬虫

电影是人们娱乐生活中的重要组成部分,随着电影产业的快速发展,观众对电影的评价也越来越多样化。IMDb(互联网电影数据库)作为全球最大的电影评分和评论平台之一,收录了成千上万部电影、电视节目及其相关数据。它提供了一个强大的 API 接口,允许开发者访问电影的评分、评论、演员信息等数据。本文将带你一步一步实现一个 Python 爬虫,使用 IMDb API 获取电影的评分和评论。我们将通过这个爬虫来分析一些热门电影的观众反馈,并可视化分析结果。

2201_76125261的博客 1055

MP3302DJ驱动MIPI屏幕背光电路设计:原理、计算与避坑指南

在嵌入式显示系统中,MIPI DSI接口负责高速图像数据传输,而屏幕背光LED的供电与恒流控制则需独立的功率电路。升压型LED驱动器通过电感储能与开关切换,将低压输入提升至灯串所需电压,并借助反馈采样维持稳定电流。PWM调光技术可灵活调节亮度,广泛应用于平板、工控屏、车载显示等场景。本文围绕MP3302DJ这一经典升压LED驱动芯片,从升压拓扑原理、关键参数计算、PCB布局布线到常见调试问题,系统讲解MIPI屏幕背光电路的完整设计链路,并针对亮度不均、啸叫、EMC干扰等工程痛点给出实用避坑经验,为中小尺寸显

weixin_33861800的博客 436

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

flex4 自定义右键菜单

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" backgroundColor="white" creationComplete="init()">

Drip 549

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Flex 屏蔽右键菜单,并自定义菜单

Flex 屏蔽右键菜单,并自定义菜单    2010-05-05 11:25:47 |  分类: Flex | 字号   订阅 ...

chenpingpi 170

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: JSP自定义标签(三) 多选控件(2)
下一篇: easyUI单元格合并自定义封装 (一)
carroll0911
博客等级 码龄17年 27粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值