自由なウインドウを作成して使用するには、メインウインドウを非表示にして、
2次ウインドウを作成する必要がありますが、その前にメインウインドウとしての
準備として、いくつか設定しておく必要があります。
まず、メインウインドウを非表示にすると、デスクトップから完全に消えてしまうので、
システムトレイに登録する必要があります。
( もし、このまま使用するのであれば、一般的な常駐アプリケーションとなります )
その為には、アイコン画像を登録する必要があるのですが、
まず、メインウインドウにタイトルアイコンを @Embed('icon.png') で埋め込んで、
そのアイコンを転用する方法を以下で説明しています。
最後に、アプリケーションとして機能できるように、システムトレイアイコンに
メニューを実装しています。
タイトルアイコンとタイトル
systemChrome が standard では、タイトルにアイコンは表示されません。
表示させるには、systemChrome を none に変更します
<?xml version="1.0" encoding="utf-8" ?>
<application xmlns="http://ns.adobe.com/air/application/1.0">
<id>airApplication</id>
<version>1.0</version>
<filename>airApplication</filename>
<initialWindow>
<title>AIR アプリケーション</title>
<content>Mainw.swf</content>
<x>300</x>
<y>200</y>
<width>600</width>
<height>300</height>
<systemChrome>none</systemChrome>
<transparent>false</transparent>
<visible>true</visible>
<minimizable>true</minimizable>
<maximizable>true</maximizable>
<resizable>true</resizable>
</initialWindow>
</application>
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
showFlexChrome="true"
initialize="initData();"
creationComplete="initApp1()"
applicationComplete="initApp2()"
visible="true"
usePreloader="true"
backgroundAlpha="1"
alwaysInFront="false"
titleIcon="@Embed('icon.png')"
title="Flex"
>
メインウインドウを非表示にする
非表示にするには、initialWindow の設定で visible=false にし、
かつ WindowedApplication のプロパティで visible="false" にします
<?xml version="1.0" encoding="utf-8" ?>
<application xmlns="http://ns.adobe.com/air/application/1.0">
<id>airApplication</id>
<version>1.0</version>
<filename>airApplication</filename>
<initialWindow>
<title>AIR アプリケーション</title>
<content>Mainw.swf</content>
<x>300</x>
<y>200</y>
<width>600</width>
<height>300</height>
<systemChrome>none</systemChrome>
<transparent>false</transparent>
<visible>false</visible>
<minimizable>true</minimizable>
<maximizable>true</maximizable>
<resizable>true</resizable>
</initialWindow>
</application>
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
showFlexChrome="true"
initialize="initData();"
creationComplete="initApp1()"
applicationComplete="initApp2()"
visible="false"
usePreloader="true"
backgroundAlpha="1"
alwaysInFront="false"
titleIcon="@Embed('icon.png')"
title="Flex"
>
しかし、このままではデスクトップ上から完全に消えてしまうので、
システムトレイにアイコンが表示されるようにします。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
showFlexChrome="true"
initialize="initData();"
creationComplete="initApp1()"
applicationComplete="initApp2()"
visible="false"
usePreloader="true"
backgroundAlpha="1"
alwaysInFront="false"
title="Flex"
titleIcon="@Embed('icon.png')"
>
<mx:Script>
<![CDATA[
// *********************************************************
// initialize
// *********************************************************
public function initData():void {
trace("[App:beforeDisplay]");
// *********************************************************
// 表示レイアウトが完成する前に、
// タイトルのアイコンを Image に転送しておきます
// initApp1 では正しいビットマップが作成されません
// *********************************************************
app_icon.source = Object(this.titleIcon);
}
// *********************************************************
// creationComplete
// *********************************************************
private function initApp1():void {
trace("[App:afterDisplay]");
// *********************************************************
// Image に転送されたアイコンを
// タスクトレイのアイコンとして登録します
// *********************************************************
var bmp:BitmapData = new BitmapData(app_icon.width,app_icon.height,false,0xC0C0C0);
bmp.draw( app_icon,null,null,"normal");
var iconBitmap:Array = new Array();
iconBitmap.push( bmp );
this.nativeApplication.icon.bitmaps = iconBitmap;
}
// *********************************************************
// applicationComplete
// *********************************************************
private function initApp2():void {
trace("[App:start]");
}
]]>
</mx:Script>
<mx:Image id="app_icon" />
</mx:WindowedApplication>
さらに、このアイコンから終了できるようにメニューを実装します
// *********************************************************
// applicationComplete
// *********************************************************
private function initApp2():void {
trace("[App:start]");
// *********************************************************
// タスクトレイのアイコンにメニューを追加
// *********************************************************
var adobe:String = "http://livedocs.adobe.com/flex/3_jp/langref/";
var nativeMenu:NativeMenu;
nativeMenu = new NativeMenu();
// 終了
var menuItem:NativeMenuItem = nativeMenu.addItem(new NativeMenuItem("終了"));
menuItem.addEventListener(flash.events.Event.SELECT,
function():void {
// 一応アイコンのビットマップをクリア
mx.core.Application.application.nativeApplication.icon.bitmaps = [];
// 終了
mx.core.Application.application.exit();
}
);
// セパレータ
menuItem = nativeMenu.addItem(new NativeMenuItem("", true));
// サブメニューを作成
var nativeSubMenu:NativeMenu = new NativeMenu();
nativeMenu.addSubmenu( nativeSubMenu, "Adobe Flex 3 リファレンスガイド" );
// NativeMenu
menuItem = nativeSubMenu.addItem(new NativeMenuItem("NativeMenu"));
menuItem.addEventListener(Event.SELECT,
function():void {
openUrl( adobe + "flash/display/NativeMenu.html");
}
);
// NativeWindow
menuItem = nativeSubMenu.addItem(new NativeMenuItem("NativeWindow"));
menuItem.addEventListener(Event.SELECT,
function():void {
openUrl( adobe + "flash/display/NativeWindow.html");
}
);
// 実装
SystemTrayIcon(this.nativeApplication.icon).menu = nativeMenu;
}
// *********************************************************
// ブラウザで開く
// *********************************************************
public function openUrl(url:String):void {
var req:URLRequest = new URLRequest(url);
navigateToURL(req, "_blank");
}
|