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

Flex AIR 系统托盘于右键托盘菜单的实现

发布时间:2020-12-15 01:13:44 所属栏目:百科 来源:网络整理
导读:? 这个文档现在仅仅是个小测试的例子,只实现了系统托盘和托盘的右键菜单: 首先在初始化界面的方法中要用到Loader类来加载图片,再注册两个事件,一个关键的是对托盘的生成和菜单的控制 ;第二个时间是注册关闭的事件,在这个事件的方法中首先要屏蔽系统默
?

这个文档现在仅仅是个小测试的例子,只实现了系统托盘和托盘的右键菜单:

首先在初始化界面的方法中要用到Loader类来加载图片,再注册两个事件,一个关键的是对托盘的生成和菜单的控制 ;第二个时间是注册关闭的事件,在这个事件的方法中首先要屏蔽系统默认的关闭,再编写供选择的对话框:

菜单不难,做过java Swing的人都会,原理写法都是一样的。关闭的时候也只有两部,一是隐藏当前的窗体,二是把图标加载进来。说也说不大清楚,直接看代码,带注释,很清楚。

?

?

?源代码:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" ??????? xmlns:s="library://ns.adobe.com/flex/spark" ??????? xmlns:mx="library://ns.adobe.com/flex/mx" ??????? applicationComplete="initApplication(event)"> ?<fx:Script> ??<![CDATA[ ???import mx.controls.Alert; ???import mx.events.CloseEvent; ???import mx.events.FlexEvent; ??? ???private var dockImage:BitmapData;?? ???protected function initApplication(event:FlexEvent):void ???{ ????var loader:Loader = new Loader(); ????//这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制?? ????loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray); ????//这里先要加载托盘图标的小图片?? ????loader.load(new URLRequest("users.png")); ????this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件?? ???} ? ???//关闭窗体的事件 ???public function closingApplication(event:Event):void ???{?? ????//阻止默认的事件?? ????event.preventDefault(); ????Alert.yesLabel="退出";?? ????Alert.noLabel="最小化";?? ????//弹出自定义的选择框,关于Alert的详细用法,参考官方文档或我前面的相关文章. ????Alert.show("退出或者最小化到托盘","退出?",3,this,alertCloseHandler);? ???? ???}? ??? ??? ???//根据用户的选择来判断做什么,这里选择是就是关闭,选择否(最小化)就是最小化到托盘.?? ???private function alertCloseHandler(event:CloseEvent):void ???{?? ????if(event.detail==Alert.YES){?? ?????closeApp(event);?? ????}else{?? ?????dock();//最小化到托盘?? ????}??? ???}?? ??? ???//生成托盘??? ???public function prepareForSystray(event:Event):void ???{?? ????dockImage=event.target.content.bitmapData;?? ????if(NativeApplication.supportsSystemTrayIcon){?? ?????setSystemTrayProperties();//设置托盘菜单的事件?? ?????SystemTrayIcon(NativeApplication.nativeApplication.icon).menu=createSystrayRootMenu();//生成托盘菜单 ????}????? ???}?? ??? ???public function createSystrayRootMenu():NativeMenu{?? ????var menu:NativeMenu = new NativeMenu();?? ????var openNativeMenuItem:NativeMenuItem = new NativeMenuItem("还原");//生成OPEN菜单项?? ????var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("退出");//同理?? ????openNativeMenuItem.addEventListener(Event.SELECT,undock);?? ????exitNativeMenuItem.addEventListener(Event.SELECT,closeApp);//添加EXIT菜单项事件?? ????menu.addItem(openNativeMenuItem);?? ????menu.addItem(new NativeMenuItem("",true));//separator??? ????menu.addItem(exitNativeMenuItem);//将菜单项加入菜单?? ????return menu;?? ???}?? ???//设置托盘图标的事件?? ???private function setSystemTrayProperties():void{?? ????SystemTrayIcon(NativeApplication.nativeApplication .icon).tooltip = "Fly_AIR之托盘";?? ????SystemTrayIcon(NativeApplication.nativeApplication .icon).addEventListener(MouseEvent.CLICK,undock);?? ????stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING,nwMinimized);??? ???}?? ???//最小化窗体?? ???private function nwMinimized(displayStateEvent:NativeWindowDisplayStateEvent):void {?? ????if(displayStateEvent.afterDisplayState == NativeWindowDisplayState.MINIMIZED) {?? ?????displayStateEvent.preventDefault();//阻止系统默认的关闭窗体事件?? ?????dock();//将程序放入托盘?? ????}??? ???}?? ??? ???//激活程序窗体??? ???public function undock(evt:Event):void {?? ????stage.nativeWindow.visible = true;//设置本地程序窗体可见?? ????stage.nativeWindow.orderToFront();//设置本地程序窗体到最前端?? ????NativeApplication.nativeApplication .icon.bitmaps = [];// 将托盘图标清空?? ???}?? ???? ??? ???//关闭程序窗体? ???private function closeApp(evt:Event):void { ????stage.nativeWindow.close();?? ???}?? ??? ???//将本地应用程序放到托盘??? ???public function dock():void {?? ????stage.nativeWindow.visible = false; //设置本地程序窗体不可见??? ????NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标?? ???}? ??]]> ?</fx:Script> ?<fx:Declarations> ??<!-- 将非可视元素(例如服务、值对象)放在此处 --> ?</fx:Declarations> </s:WindowedApplication>

(编辑:李大同)

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

    推荐文章
      热点阅读