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

把AIR程序最小化到系统托盘.

2008-04-27 20:03 441 查看
非常酷!

新建一个AIR工程,拷贝代码进去,运行。

<?xml version="1.0" encoding="utf-8"?>

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApplication()">

<mx:Script>

<![CDATA[

/**

* This example describes how to dock an AIR application to the system tray

* and then undock it again.

* The minimize and close actions of the WindowedApplication are caught, so

* that we can introduce our own actions.

*

* A simple systray menu is presented, to show the usage of that.

*

* @Author: S.Radovanovic

* @Url: http://www.saskovic.com/blog/?p=5
* @Date: 24-11-2007

* @Author: Jeffry Houser

* @Date: 09-01-2007

* Updated for AIR Beta 3

*/

import mx.controls.Alert;

import mx.events.CloseEvent;

private var dockImage:BitmapData;

/**

* Initialize the application to the default values.

* This method is called upon creationComplete from the Windowed Application

*

* @Author: S.Radovanovic

*/

public function initApplication():void {

//Use the loader object to load an image, which will be used for the systray //After the image has been loaded into the object, we can prepare the application //for docking to the system tray

var loader:Loader = new Loader();

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, prepareForSystray);

loader.load(new URLRequest("http://www.saskovic.com/images/systray_icon_16.png"));

//Catch the closing event so that the user can decide if it wants to dock or really //close the application

this.addEventListener(Event.CLOSING, closingApplication);

}

/**

* Check if the user wants to close the application or dock it

*

* @Author: S.Radovanovic

*/

private function closingApplication(evt:Event):void {

//Don't close, so prevent the event from happening

evt.preventDefault();

//Check what the user really want's to do //Alert.buttonWidth = 110;

Alert.yesLabel = "Close";

Alert.noLabel = "Minimize";

Alert.show("Close or minimize?", "Close?", 3, this, alertCloseHandler);

}

// Event handler function for displaying the selected Alert button.

private function alertCloseHandler(event:CloseEvent):void {

if (event.detail==Alert.YES) {

closeApp(event);

} else {

dock();

}

}

/**

* Check to see if the application may be docked and set basic properties

*

* @Author: S.Radovanovic

*/

public function prepareForSystray(event:Event):void {

//Retrieve the image being used as the systray icon

dockImage = event.target.content.bitmapData;

//For windows systems we can set the systray props //(there's also an implementation for mac's, it's similar and you can find it on the net )

if (NativeApplication.supportsSystemTrayIcon){

setSystemTrayProperties();

//Set some systray menu options, so that the user can right-click and access functionality //without needing to open the application

SystemTrayIcon(NativeApplication.nativeApplication .icon).menu = createSystrayRootMenu();

}

}

/**

* Create a menu that can be accessed from the systray

*

* @Author: S.Radovanovic

*/

private function createSystrayRootMenu():NativeMenu{

//Add the menuitems with the corresponding actions

var menu:NativeMenu = new NativeMenu();

var openNativeMenuItem:NativeMenuItem = new NativeMenuItem("Open");

var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("Exit");

//What should happen when the user clicks on something

openNativeMenuItem.addEventListener(Event.SELECT, undock);

exitNativeMenuItem.addEventListener(Event.SELECT, closeApp);

//Add the menuitems to the menu

menu.addItem(openNativeMenuItem);

menu.addItem(new NativeMenuItem("",true));

//separator

menu.addItem(exitNativeMenuItem);

return menu;

}

/**

* To be able to dock and undock we need to set some eventlisteners

*

* @Author: S.Radovanovic

*/

private function setSystemTrayProperties():void{

//Text to show when hovering of the docked application icon

SystemTrayIcon(NativeApplication.nativeApplication .icon).tooltip = "Systray test application";

//We want to be able to open the application after it has been docked

SystemTrayIcon(NativeApplication.nativeApplication .icon).addEventListener(MouseEvent.CLICK, undock);

//Listen to the display state changing of the window, so that we can catch the minimize

stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, nwMinimized); //Catch the minimize event

}

/**

* Do the appropriate actions after the windows display state has changed.

* E.g. dock when the user clicks on minize

*

* @Author: S.Radovanovic

*/

private function nwMinimized(displayStateEvent:NativeWindowDisplayStateEvent):void {

//Do we have an minimize action? //The afterDisplayState hasn't happened yet, but only describes the state the window will go to, //so we can prevent it!

if(displayStateEvent.afterDisplayState == NativeWindowDisplayState.MINIMIZED) {

//Prevent the windowedapplication minimize action from happening and implement our own minimize //The reason the windowedapplication minimize action is caught, is that if active we're not able to //undock the application back neatly. The application doesn't become visible directly, but only after clicking //on the taskbars application link. (Not sure yet what happens exactly with standard minimize)

displayStateEvent.preventDefault();

//Dock (our own minimize)

dock();

}

}

/**

* Do our own 'minimize' by docking the application to the systray (showing the application icon in the systray)

*

* @Author: S.Radovanovic

*/

public function dock():void {

//Hide the applcation

stage.nativeWindow.visible = false;

//Setting the bitmaps array will show the application icon in the systray

NativeApplication.nativeApplication .icon.bitmaps = [dockImage];

}

/**

* Show the application again and remove the application icon from the systray

*

* @Author: S.Radovanovic

*/

public function undock(evt:Event):void {

//After setting the window to visible, make sure that the application is ordered to the front, //else we'll still need to click on the application on the taskbar to make it visible

stage.nativeWindow.visible = true;

stage.nativeWindow.orderToFront();

//Clearing the bitmaps array also clears the applcation icon from the systray

NativeApplication.nativeApplication .icon.bitmaps = [];

}

/**

* Close the application

*

* @Author: S.Radovanovic

*/

private function closeApp(evt:Event):void {

stage.nativeWindow.close();

}

]]>

</mx:Script>

</mx:WindowedApplication>

来自:http://www.saskovic.com/blog/?p=5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: