`
shuaiqixiao4
  • 浏览: 54447 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类

Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方法

    博客分类:
  • FLEX
阅读更多

AIR教程

Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方法

右键菜单:

var mainMenu:NativeMenu = new NativeMenu();
var minimizeMenu:NativeMenuItem = new NativeMenuItem("Minimize");
var maximizeMenu:NativeMenuItem = new NativeMenuItem("Maximize");
var sepMenu:NativeMenuItem = new NativeMenuItem("",true);
var restoreMenu:NativeMenuItem = new NativeMenuItem("Restore");
var closeMenu:NativeMenuItem = new NativeMenuItem("Close");
minimizeMenu.addEventListener(Event.Select, handleMenuClick);
maximizeMenu.addEventListener(Event.Select, handleMenuClick);
restoreMenu.addEventListener(Event.Select, handleMenuClick);
closeMenu.addEventListener(Event.Select, handleMenuClick);
mainMenu.addItem(minimizeMenu);
mainMenu.addItem(maximizeMenu);
mainMenu.addItem(sepMenu);
mainMenu.addItem(restoreMenu);
mainMenu.addItem(closeMenu);
this.contextMenu=mainMenu;
系统托盘:

var sysTray:SystemTrayIcon =
  NativeApplication.nativeApplication.icon as SystemTrayIcon;
  sysTray.tooltip = "测试tray";
  //
  sysTray.menu = this.contextMenu;
  sysTray.addEventListener(MouseEvent.CLICK,trayClick);

如何将应用程序最小化到托盘,然后给托盘图标加右键菜单以及添加相应的事件,来激活应用程序窗体.
整个流程:
1.       初始化应用时改变系统默认情况下以系统X事件的处理.
2.       定义新处理逻辑(本文是弹出对话框)
3.       生成托盘图标并置于状态栏
4.       给托盘图标加上右键菜单(本文是exit,和open两项)
5.       给菜单加上相应的事件
6.       大功告成

主要方法:

1. private var dockImage:BitmapData; 
2.               
3.         //初始化Application里调用此方法,完成上面的第一步: 
4.             public function initApplication():void{ 
5.                 var loader:Loader=new Loader(); 
6.                 loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);// 这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制 
7.                 loader.load(new URLRequest("assets/images/32.png"));//这里先要加载托盘图标的小图片 
8.                 this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件 
9.             } 
10.               
11.         //关闭窗体的事件 
12.             public function closingApplication(event:Event):void{ 
13.                 event.preventDefault();//阻止默认的事件 
14.                 Alert.yesLabel="Close"; 
15.                 Alert.noLabel="Mini"; 
16.                 Alert.show("Close or Minimize?", "Close?", 3, this, alertCloseHandler);//弹出自定义的选择框, 关于Alert的详细用法,参考官方文档或我前面的相关文章. 
17.             } 
18.         //根据用户的选择来判断做什么,这里选择是就是关闭,选择否(Mini)就是最小化到托盘. 
19.         private function alertCloseHandler(event:CloseEvent):void{ 
20.             if(event.detail==Alert.YES){ 
21.                 closeApp(event); 
22.             }else{ 
23.                 dock();//最小化到托盘 
24.             } 
25.         } 
26.           
27.     //生成托盘 
28.         public function prepareForSystray(event:Event):void{ 
29.             dockImage=event.target.content.bitmapData; 
30.             if(NativeApplication.supportsSystemTrayIcon){ 
31.                 setSystemTrayProperties();//设置托盘菜单的事件 
32.                 SystemTrayIcon(NativeApplication.nativeApplication.icon).menu=createSystrayRootMenu();//生成托盘菜单 
33.             }     
34.         } 
35.           
36.         public function createSystrayRootMenu():NativeMenu{ 
37.             var menu:NativeMenu = new NativeMenu(); 
38.             var openNativeMenuItem:NativeMenuItem = new NativeMenuItem("Open");//生成OPEN菜单项 
39.             var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("Exit");//同理 
40.             openNativeMenuItem.addEventListener(Event.SELECT, undock); 
41.             exitNativeMenuItem.addEventListener(Event.SELECT, closeApp);//添加EXIT菜单项事件 
42.             menu.addItem(openNativeMenuItem); 
43.             menu.addItem(new NativeMenuItem("",true));//separator   
44.             menu.addItem(exitNativeMenuItem);//将菜单项加入菜单 
45. 
46.             return menu; 
47. 
48.         } 
49.         //设置托盘图标的事件 
50.         private function setSystemTrayProperties():void{ 
51.             SystemTrayIcon(NativeApplication.nativeApplication .icon).tooltip = "TurboSquid squidword"; 
52.             SystemTrayIcon(NativeApplication.nativeApplication .icon).addEventListener(MouseEvent.CLICK, undock); 
53.             stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, nwMinimized);   
54.         } 
55.           
56. //最小化窗体 
57.         private function nwMinimized(displayStateEvent:NativeWindowDisplayStateEvent):void { 
58.             if(displayStateEvent.afterDisplayState == NativeWindowDisplayState.MINIMIZED) { 
59.                 displayStateEvent.preventDefault();//阻止系统默认的关闭窗体事件 
60.                 dock();//将程序放入托盘 
61.             } 
62.         } 
63. 
64.         //将本地应用程序放到托盘 
65.         public function dock():void { 
66.             stage.nativeWindow.visible = false; //设置本地程序窗体不可见 
67.             NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标 
68.         } 
69.           
70.         //激活程序窗体 
71.         public function undock(evt:Event):void { 
72.         stage.nativeWindow.visible = true;//设置本地程序窗体可见 
73.         stage.nativeWindow.orderToFront();//设置本地程序窗体到最前端 
74.         NativeApplication.nativeApplication .icon.bitmaps = [];将托盘图标清空 
75.         } 
76.           
77.         //关闭程序窗体 
78.         private function closeApp(evt:Event):void { 
79.             stage.nativeWindow.close(); 
80.         } 
81. 



用Flex建立一个100%窗口透明的AIR程序,以及打包成.AIR文件
Flex建立一AIR程序
窗口透明的AIR程序
打包成.AIR文件
第一步:打开FLEX3  创建一个 FLEX project


接着是命名,并选中 Desktop application 在AIR中运行

自动生产XML配置文件
创建好以后FLEX3会自动生产一些文件,再Src文件夹里会有两个XML描述语言:
.MXML文件为前台描述文件
.XML里面可以更改一些系统配置
本例:去除AIR窗口,并让AIR程序边界透明。
我们打开airia_ex_login-app.xml这个文件
找到: <systemChrime></systemChrime> 和 <transparent></transparent>

修改为下图蓝色区域。
<systemChrime>none</systemChrime>  表示没有系统窗口
<transparent>true</transparent>    表示开启背景透明

注意:要去掉<!-- --> 也就是说,本身默认文件是把这两项给注释掉了,我们现在把他启用。
注意2:本教程省略了案例中“AIR界面UI设计”的过程,UI界面源文件在附件内里有。

这样我们就完成了第一步。运行一下看看结果?

我们发现FLEX有个默认的STYLE显示了出来。我们现在要想办法把他去掉
第二步:配置MXML文件中的“mx:WindowedApplication”
在 mx:WindowedApplication 内添加一下定制便可去掉FLEX默认的风格界面。
showFlexChrome="false"     
alwaysInFront="true"
layout="absolute"
这里我们再把界面大小设定好。
width="314"
height="460"
如图:

再次运行看看:

GOOD!一个完美100%透明的AIR RUN起来了。

也许你还会碰到一下问题
窗口没办法在桌面拖动?
没办法关闭和最小化?
请关注AIRIA.cn原创教程的下一集


最后把此例的源文件、工程文件、安装.AIR文件全部提供给大家下载参考,忘各位网友支持AIRIA的发展。


附件:


扩展参考:flex制作一个用户登录框(含验证码)
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
            fontSize="12" horizontalAlign="center" creationComplete="init()">
          
<mx:Script>
<![CDATA[ import mx.controls.Alert; private function init():void{ generate.text=generateCheckCode(); } //login identifying private function loginHandler():void{ if(user.text==""||pass.text==""){ Alert.show("user or pass is empty","tips"); }else{ if(user.text=="shane"&&pass.text=="shane" &&identify.text.toLowerCase()==generate.text.toLowerCase()){ Alert.show("login is OK","tips"); currentState="hollow"; }else{ if(identify.text.toLowerCase()!=generate.text.toLowerCase()){ Alert.show("indentifyCode is error","tips"); generate.text=generateCheckCode(); }else{ Alert.show("user or pass error","tips"); } } } } //clear private function clearHandler():void{ user.text=pass.text=""; } //generate identifying coder private function generateCheckCode():String{ //init var num:Number; var code:String; var checkCode:String=""; for(var i:int=0;i<5;i++){ num=Math.round(Math.random()*100000); if(num%2==0){ code=String.fromCharCode(48+(num%10)); }else{ code=String.fromCharCode(65+(num%26)); } checkCode +=code; } return checkCode; } ]]>
</mx:Script>
          
<mx:Panel id="panel" x="143" y="115" width="350" height="229" layout="absolute" title="login">

<mx:Button id="btnLogin" x="73" y="141" label="login" click="loginHandler()"/>
<mx:Button id="btnClear" x="167" y="141" label="clear" click="clearHandler()"/>

<mx:Label x="44" y="31" text="user"/>
<mx:Label x="44" y="64" text="pass"/>

<mx:TextInput id="user" x="81" y="31"/>
<mx:TextInput id="pass" x="81" y="62" displayAsPassword="true"/>
<mx:Text x="28" y="100" text="identify"/>
<mx:TextInput x="81" y="98" width="50" id="identify"/>
<mx:Label x="139" y="100" width="48" id="generate"/>
<mx:Label x="195" y="100" text="看不清楚 换个~~" click="generateCheckCode()"/>

</mx:Panel>

  <mx:states>
   <mx:State name="hollow">
    <mx:RemoveChild target="{panel}"/>
    <mx:AddChild position="lastChild">
     <mx:Label text="hollow marshane" x="0" y="200" fontSize="200" color="red"/>
    </mx:AddChild>
   </mx:State>
  </mx:states>

</mx:Application>




自动配置和在线安装Adobe AIR运行环境(AIR Express Install Badge )

接触Adobe AIR的朋友一定会有这样一个疑惑:
如果客户的电脑上没装Adobe AIR运行环境怎么办?
事实上,我们明白,在Adobe AIR普及率还不算高的今天(尤其在中国)总是告诉客户“请先下载Adobe AIR1.1”会显得太不“友好”。因为可能网友们一时半会还没明白“AIR”是什么,我为什么要安装这个东西?
现在给大家介绍来自Adobe的解决方案:AIR Express Install Badge
如果你需要发布一个Adobe AIR应用,没有安装Adobe AIR运行环境的客户机它会为你自动地先安装Adobe AIR运行环境,然后再安装Adobe AIR应用。当然已经安装了AIR运行环境的就会直接安装AIR应用了. 这种在线安装AIR的方法很方便。
AIR Express Install Badge 事实上是一种Adobe AIR推出的“在线安装”AIR应用的方式。
怎样创建一个Adobe AIR应用在线安装?(步骤和下载):
• 首先需要下载和配置AIR SDK     [ 下载1(AIR at WIN)下载2 (AIR at mac)更多SDK AIR Flash开发中心 ]
• 然后需要创建一个在线安装时用的图片
• 接着可以使用Flash来创建一个安装动画
简而言之,这个方法就是使用一个Flash动画作为在线安装的前端(因为FLASH的普及率是相当高的),这个时候通过FLASH来判断客户端是否有 Adobe AIR运行环境,如果没有则自动先安装Adobe AIR运行环境(当然时间也会变的长一些,需要下载、安装),接着再自动安装这个AIR应用。这个过程客户几乎察觉不到他安装了AIR。
Adobe AIR应用在线安装(配置方法) :
1.创建安装FLASH动画的背景图像
创建一个215px x 100px 图像,被用来作为背景。 默认的在线安装区域为 217px x 180px 。

2.配置SWF
       参数:
• 应用程序名称(appname):也就是你的AIR应用的名称。
• 应用程序路径 (appurl):你的AIR应用程序的下载路径。 (比如:http://www.AIRia.cn/myAirApp.air)
• AIR版本(airversion): AIR应用的版本。比如AIR1.1
• 安装按钮的颜色(buttoncolor) :如果需要,可以试用十六进制定义一个按钮颜色。(默认是灰色)
• 安装文字信息的颜色(messgagecolor) :如果需要,可以试用十六进制定义一个按钮颜色。(默认是黑色)
• 背景图像地址(imageurl):背景图像地址。

像这样:

AIRia编者:如果你想让你的AIR应用为更多人接受,那么你不得不选择这个方法。但国外也有很多人反对这种做法,因为这没有征求客户的同意就安装了另外一个插件,部分人也质疑这种在线安装的安全性,本文不就这些问题进行讨论。本文为本站原创(参考了一些英文信息),转载请注明来自AIRia,谢谢!
相关:关于Flash player 10将集成AIR的某些特性的问题,本站将后续探讨。
分享到:
评论
2 楼 zhenxingzzx 2011-08-06  
看不到附件的 !!
1 楼 pangxin12345 2011-07-04  
dingdingdingdingding

相关推荐

    MFC托盘右键菜单源码

    本文将深入探讨如何在MFC应用中实现托盘图标以及与之相关的右键菜单功能。 1. **托盘图标(Tray Icon)** 托盘图标是Windows任务栏通知区域的小图标,通常用于隐藏主窗口后继续运行的应用程序。在MFC中,我们可以...

    vb 托盘代码(包含右键菜单功能,能在XP,2003等使用)

    在VB中实现托盘图标右键菜单,我们需要创建一个`ContextMenuStrip`对象,并将所需的菜单项添加到其中。每个菜单项可以通过`ToolStripMenuItem`类表示,设置其`Text`属性为菜单文本,`Click`事件处理函数则定义了用户...

    Qt 实现系统托盘,托盘菜单,托盘消息.zip

    这个类提供了一个图标,可以放置在操作系统任务栏的系统托盘区域,同时允许添加右键点击菜单和显示通知消息。 1. **创建系统托盘图标** 要创建一个系统托盘图标,首先需要实例化`QSystemTrayIcon`对象,并设置图标...

    c# 系统托盘,任务栏通知区。(右键菜单,关闭窗体是隐藏)

    本话题聚焦于`C#`中的一个特定特性:系统托盘(System Tray)和任务栏通知区(Notification Area),以及如何实现一个具有右键菜单功能的窗体,使得关闭窗体时不是彻底关闭,而是将其隐藏到任务栏通知区内。...

    C# WinForm托盘右键菜单例子源码

    本例子源码就是针对这一需求,展示了如何实现C# WinForm程序的托盘右键菜单功能。 首先,我们需要创建一个WinForm项目,并在设计视图中添加一个NotifyIcon控件。这个控件是用于在系统托盘区域显示应用程序图标的...

    ObjectDock(startdock) 系统托盘tray插件

    3. **托盘扩展**:扩展系统托盘的功能,可以更好地组织和隐藏托盘图标,避免过多图标造成视觉干扰。 4. **通知中心**:整合系统通知,使得重要消息一目了然,提升工作效率。 5. **快捷操作**:通过右键菜单,可以...

    操作系统托盘图标Tray

    操作系统托盘图标(Tray Icon)是用户界面中一个重要的组成部分,它位于任务栏的右下角,通常称为系统托盘或通知区域。这个区域显示了各种程序和服务的小图标,如网络连接、音量控制、时钟等。这些图标不仅为用户...

    Flex最小化到系统托盘及托盘图标的右键

    本文将详细介绍如何实现Flex应用最小化到系统托盘以及托盘图标的右键菜单功能。 首先,我们需要引入SystemTray类,这是Flex提供用来管理系统托盘的组件。在Flex SDK中,这个类位于mx.managers.systemClasses目录下...

    Flex3Air最小化到系统托盘

    以上代码展示了如何使用Flex 3和Adobe AIR API实现将Flex3Air应用最小化到系统托盘的功能。这只是一个基础示例,实际应用可能需要更复杂的逻辑,例如处理用户自定义设置、多语言支持以及错误处理等。完成这些功能后...

    程序缩小时缩为系统托盘(system tray)的小图标.rar_托盘_系统 托盘_系统托盘_系统托盘 图标

    在提供的压缩包中,"程序缩小时缩为系统托盘(system tray)的小图标wsysvc14c"可能是一个示例程序,展示了如何实现这个功能。"www.pudn.com.txt"可能是关于这个示例的说明或源代码的下载链接。为了深入学习和理解这个...

    icon(托盘图标+图标右键弹出菜单+图标冒泡)

    标题中的"icon(托盘图标+图标右键弹出菜单+图标冒泡)"是指一个针对Windows操作系统设计的软件功能,该功能集成了托盘图标、右键菜单和图标冒泡通知。下面将详细阐述这三个核心知识点。 1. 托盘图标(System Tray ...

    C#137托盘,右键演示 源代码

    下面我们将深入探讨C#中托盘图标的应用,以及如何实现右键菜单功能。 首先,托盘图标是Windows应用程序中的一种常见设计,当用户关闭主窗口后,程序依然能在系统托盘区域保持运行状态,通常会有一个小图标代表该...

    C#系统托盘程序,且托盘处带有菜单

    本主题聚焦于创建一个C#系统托盘程序,它能在任务栏通知区域(也称为系统托盘或系统 tray)显示一个图标,并提供菜单供用户进行交互。这通常用于那些在后台运行并需要低调存在的应用。 1. **系统托盘的概念**:系统...

    FLEX提高篇--------AIR应用程序的托盘及托盘菜单的制作

    在本文中,我们将深入探讨如何使用Adobe Flex和Adobe AIR技术来创建应用程序的系统托盘以及托盘菜单。Flex是一款强大的开发框架,用于构建富互联网应用(RIA),而AIR(Adobe Integrated Runtime)则允许这些Flex...

    tray系统托盘显示

    总的来说,实现"tray系统托盘显示"涉及创建和管理托盘图标,处理用户与图标的交互,以及在对话框程序中集成这些功能。通过以上步骤,我们可以构建一个能够在系统托盘中显示并响应用户操作的应用程序。

    Swing 实现系统托盘

    在Java的Swing库中,实现系统托盘功能可以为应用程序提供一个持续的交互界面,即使主窗口已经最小化或关闭。系统托盘,也称为通知区域或系统通知区,通常位于操作系统任务栏的右侧,允许用户快速访问常用的功能或...

    AIR System Tray and Dock Example

    标题 "AIR System Tray and Dock Example" 提供了一个关键线索,表明我们要探讨的是关于Adobe Integrated Runtime (AIR)的应用程序,特别是如何在系统托盘或Dock区域实现功能。在计算机用户界面中,系统托盘通常位于...

    托盘TRaY源程序

    在Windows操作系统中,系统托盘区域是任务栏右下角的一个重要组成部分,它为用户提供了一个快速访问系统和应用程序的功能界面。开发者通常会利用这一区域实现各种后台服务和快速功能的接入,比如常见的音量控制、...

    Qt个性化系统托盘的实现

    在实际应用中,你可能还需要处理更多的细节,比如图标的状态变化、托盘图标的双击事件、添加更多菜单项以及自定义右键菜单的样式等。Qt库提供了丰富的功能,可以帮助我们实现各种复杂的需求。 在这个名为"Computer...

Global site tag (gtag.js) - Google Analytics