Flex4 自定义右键菜单

来源:互联网 发布:mac 系统架构图 编辑:程序博客网 时间:2024/06/05 03:15

第一步:到http://rightclickmanager.googlecode.com/下载rightclickmanager-source-lib-0.1.rar并引入自己的FLEX工程,这是实现右键点击事件,及完全屏闭系统右键菜单的关键!(将src目录下的com复制到自己的Flex工程中即可,mx不用复制到自己的工程中)

 

第二步:

修改RightClickManager.as文件的

static private var rightClickTarget:*;

 

再修改两个该文件的两个函数:

static private function mouseOverHandler(event:MouseEvent) : void

{

rightClickTarget = InteractiveObject(event.target);  

return;  

}

 

static private function dispatchRightClickEvent() : void

{

var event:ContextMenuEvent;

if (rightClickTarget != null)  

{  

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

rightClickTarget.dispatchEvent(event);  

}// end if  

return;

}

 

修改RightClickManager的事件从MouseEvent改为ContextMenuEvent是为了能在列表控件DataGrid\Tree\List上点右键时自动选择当前行,使用了ContextMenuEvent事件中的 event.mouseTarget和列表控件的IListItemRenderer接口!

 

第三步:打开自己的Flex工程下的html-template文件夹下的index.template.html文件(右击-Open With-Text Editor),在var params = {};语句的下面添加下面的语句:

params.wmode = "opaque";//屏蔽系统右键菜单的关键

 

第四步:在主程序文件中引入:

(注:写在

 

 

 

的里面)

 

import com.siloon.plugin.rightClick.RightClickManager;

 

[Event(name="rightClick",type="flash.events.ContextMenuEvent")]

 

//右键菜单的图标

[Embed("images/menu_SP_add.png")]

private var menu_SP_add:Class;

 [Embed("images/menu_TZ_add.png")]

private var menu_TZ_add:Class;

 [Embed("images/menu_Folder_add.png")]

private var menu_Folder_add:Class;

 [Embed("images/menu_FJ_uploadsingle.png")]

private var menu_FJ_uploadsingle:Class;

……

 

protected var rightClickRegisted:Boolean = false;

private var menu:Menu;

 

第五步:

init函数中加入如下语句:

(注:init函数即程序的初始化函数

xmlns:fx="http://ns.adobe.com/mxml/2009"

xmlns:s="library://ns.adobe.com/flex/spark"

xmlns:mx="library://ns.adobe.com/flex/mx"

creationComplete="init();" layout="absolute"

minWidth="1000" minHeight="650" xmlns:local="*">

 

if (!rightClickRegisted)  

{  

RightClickManager.regist();  

rightClickRegisted = true;  

} 

tree.addEventListener(RightClickManager.RIGHT_CLICK,treeRightClickHandler);

 

再添加如下函数:

//mx:Tree控件右击事件

private function treeRightClickHandler(event:ContextMenuEvent):void

{

tree_onRightClicked(event); 

tree_removeMenu();

             

tree_InitMenu();

}

 

//mx:Tree控件右击自动选择

private function tree_onRightClicked(e:ContextMenuEvent):void 

{  

var rightClickItemRender:IListItemRenderer;    

              

var rightClickIndex:int;  

             

if(e.mouseTarget is IListItemRenderer)

{          

rightClickItemRender = IListItemRenderer(e.mouseTarget);         }

else if(e.mouseTarget.parent is IListItemRenderer)

{          

rightClickItemRender = IListItemRenderer(e.mouseTarget.parent);    

}    

             

if(rightClickItemRender != null)

{    

rightClickIndex = tree.itemRendererToIndex(rightClickItemRender);    

                 

if(tree.selectedIndex != rightClickIndex)

{    

tree.selectedIndex = rightClickIndex;   

}   

} 

}

 

//删除右键菜单

private function tree_removeMenu():void 

{  

if(menu!=null)  

{  

menu.hide();

menu.removeEventListener(MenuEvent.ITEM_CLICK,tree_MenuItemSelected);  

menu=null;  

}  

}

 

//生成右键菜单

private function tree_InitMenu():void

{

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

             

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

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

menu.variableRowHeight = true;     

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

             

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

point = localToGlobal(point);   

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

}

 

//生成菜单项,菜单项是根据右击时自动选择的树的节点的深度和属性动态生成的,所选择的树的节点的深度和属性不同则生成的菜单项不同。(GetRootNode是获取根节点的函数,FascRightMenu等函数用于生成对应的菜单项)

private function tree_createMenuItems():Array  

{  

var menuItems:Array = new Array();

             

var menuItem:Object;

menuItem = new Object;  

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

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

menuItems.push(menuItem);

             

var currentItem:XML=tree.selectedItem as XML;

var depth:Number=GetDepth(currentItem);

if(depth==0)

{

if(GetRootNode(currentItem).attribute("tag").toString()=="gyfasctz"||GetRootNode(currentItem).attribute("tag").toString()=="myfasctz"||GetRootNode(currentItem).attribute("tag").toString()=="szfasctz")

{

FascRightMenu(menuItems);//生成对应菜单项

}

else

{

LctypeRightMenu(menuItems);

}

}

if(depth==1)

{

……

}

…… 

return menuItems;  

} 

 

//生成具体菜单项

private function FascRightMenu(menuItems:Array):void

{

var menuItem:Object = new Object;  

menuItem.label = "添加台账"; //菜单项名称

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

menuItems.push(menuItem);

}

 

//菜单项点击事件

private function tree_MenuItemSelected(event:MenuEvent):void

{

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

……

 

switch(menuItem.label)

{

case "刷新":

……

break;

    ……

}

 

效果:

Flex4自定义右键菜单

0 0
原创粉丝点击