您的位置:首页 > 大数据 > 人工智能

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

2011-07-12 11:06 751 查看
转自:阿贤

右键菜单:

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. 大功告成

主要方法:

private var dockImage:BitmapData;

//初始化Application里调用此方法,完成上面的第一步:

public function initApplication():void{

var loader:Loader=new Loader();

loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);//这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制

loader.load(new URLRequest("assets/images/32.png"));//这里先要加载托盘图标的小图片

this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件

}

//关闭窗体的事件

public function closingApplication(event:Event):void{

event.preventDefault();//阻止默认的事件

Alert.yesLabel="Close";

Alert.noLabel="Mini";

Alert.show("Close or Minimize?", "Close?", 3, this, alertCloseHandler);//弹出自定义的选择框, 关于Alert的详细用法,参考官方文档或我前面的相关文章.

}

//根据用户的选择来判断做什么,这里选择是就是关闭,选择否(Mini)就是最小化到托盘.

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");//生成OPEN菜单项

var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("Exit");//同理

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 = "TurboSquid squidword";

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 dock():void {

stage.nativeWindow.visible = false; //设置本地程序窗体不可见

NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标

}

//激活程序窗体

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();

}

==================================

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApplication()">
<mx:Script>
<![CDATA[
import flash.display.*;
import flash.net.URLRequest;
import mx.controls.Alert;
import mx.events.CloseEvent;

private var dockImage:BitmapData;
//初始化Application里调用此方法,完成上面的第一步:
public function initApplication():void{
var loader:Loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);//这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制
loader.load(new URLRequest("http://docs.google.com/locales/zh/CN/images/editor_docsslogo.gif"));//这里先要加载托盘图标的小图片
this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件
}
//关闭窗体的事件
public function closingApplication(event : Event) : void {
event.preventDefault();//阻止默认的事件
Alert.yesLabel="Close";
Alert.noLabel="Mini";
Alert.show("Close or Minimize?", "Close?", 3, this, alertCloseHandler);//弹出自定义的选择框, 关于Alert的详细用法,参考官方文档或我前面的相关文章.
}

//根据用户的选择来判断做什么,这里选择是就是关闭,选择否(Mini)就是最小化到托盘.
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");//生成OPEN菜单项
var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("Exit");//同理
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 = "TurboSquid squidword";
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 dock():void {
stage.nativeWindow.visible = false; //设置本地程序窗体不可见
NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标
}

//激活程序窗体
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();
}
]]>
</mx:Script>
</mx:WindowedApplication>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: