関連ページ  
2次ウインドウでアプリケーションを作成する :【AIR Flex】

AIR のウインドウ (1) -- メインウインドウ で、いろいろなウインドウを作成しましたが、
メインウインドウでは設定でき無い type を使用するには、2次ウインドウを作成
して使用する必要があります。

2次ウインドウを使用すれば、自由にウインドウ設定ができるようになるので、
メインウインドウは特に必要無いかもしれません。ですから、それを想定して、
AIR のウインドウ (2) -- メインウインドウ では、メインウインドウをシステムトレイ
に登録して動作するようにしました。

2次ウインドウを作成するには、Window クラスを別ファイルで作成して、
ユーザークラス( Window クラスを継承した形 ) をインスタンス化して使用します


ユーザークラスと呼び出し
type="utility"



systemChrome が standard と none での見た目の差は、type="normal"と差はありませんが、
utility では、タスクバーに表示されません。standard の場合には、「閉じる」ボタンしか
無いので処理を実装すれば矛盾しませんが、none の場合では最小化や最大化が有効になっているので
カスタマイズが必要です

↓
minimizable="false"
maximizable="false"
LboxWindow.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Window
	xmlns:mx="http://www.adobe.com/2006/mxml"

	type="utility"
	systemChrome="none"
	transparent="false"
	showFlexChrome="true"

	initialize="initData();"
	creationComplete="initApp1()"
	applicationActivate="initApp2()"

	visible="true"
	usePreloader="true"

	backgroundAlpha="1"

	alwaysInFront="false"

	title="Flex"
	titleIcon="@Embed('icon.png')"

	width="600"
	height="300"

	horizontalAlign="center"
	verticalAlign="middle"
>

<mx:Script>
<![CDATA[

	// *********************************************************
	// initialize
	// *********************************************************
	public function initData():void {

		trace("[App:beforeDisplay]");

	}

	// *********************************************************
	// creationComplete
	// *********************************************************
	private function initApp1():void {

		trace("[App:afterDisplay]");

	}

	// *********************************************************
	// applicationComplete
	// *********************************************************
	private function initApp2():void {

		trace("[App:start]");

		dr.setFocus();

	}


]]>
</mx:Script>


<mx:Image id="dr" source="@Embed('dr.png')" />

<mx:HBox>
	<mx:TextInput id="data" width="400"	/>
	<mx:Button  
		id="btn"  
		label="参照"  
	/>
</mx:HBox>


</mx:Window>
呼び出し部分
	import LboxWindow;

	public var win:LboxWindow = new LboxWindow();
	public var rect:Rectangle;
	public var primaryScreen:Screen;

	// *********************************************************
	// initialize
	// *********************************************************
	public function initData():void {

		trace("[App:beforeDisplay]");

		// *********************************************************
		// 表示レイアウトが完成する前に、
		// タイトルのアイコンを Image に転送しておきます
		// initApp1 では正しいビットマップが作成されません
		// *********************************************************
		app_icon.source = Object(this.titleIcon);

		primaryScreen = Screen.mainScreen;
		rect = primaryScreen.bounds;

		win.open();
		win.nativeWindow.x = (rect.width-this.nativeWindow.width)/2;
		win.nativeWindow.y = (rect.height-this.nativeWindow.height)/2 - 200;
	}
type="lightweight" では、systemChrome は none でのみ動作します。
見た目の差はありませんが、マニュアルでは「最小ウインドウ」とあります。
やはり、タスクバーに表示されません。
type="lightweight"





タスクバーに表示されない、最小化と元のサイズに戻す
type="utility" でかつ systemChrome="none" の場合、最小化ボタンが有効です。
しかし、最小化してしまうとタスクバーに表示されないので戻せません。

実際バグっぽい動きもしますので、最小化した場合は「非表示」にし、
システムトレイのメニューに「元のサイズに戻す」を実装します。
<?xml version="1.0" encoding="utf-8"?>
<mx:Window
	xmlns:mx="http://www.adobe.com/2006/mxml"

	type="utility"
	systemChrome="none"
	transparent="false"
	showFlexChrome="true"

	initialize="initData();"
	creationComplete="initApp1()"
	applicationActivate="initApp2()"

	visible="true"
	usePreloader="true"

	backgroundAlpha="1"

	alwaysInFront="false"

	title="Flex"
	titleIcon="@Embed('icon.png')"

	width="600"
	height="300"

	horizontalAlign="center"
	verticalAlign="middle"

	minimizable="true"
	maximizable="false"

	displayStateChange="miniAction(event)"
	close="exitApp()"
>

<mx:Script>
<![CDATA[

	// *********************************************************
	// initialize
	// *********************************************************
	public function initData():void {

		trace("[App:beforeDisplay]");

	}

	// *********************************************************
	// creationComplete
	// *********************************************************
	private function initApp1():void {

		trace("[App:afterDisplay]");

	}

	// *********************************************************
	// applicationComplete
	// *********************************************************
	private function initApp2():void {

		trace("[App:start]");

		dr.setFocus();

	}

	// *********************************************************
	// 最小化の処理
	// *********************************************************
	private function miniAction( e:flash.events.NativeWindowDisplayStateEvent ):void {

		trace("[State] : " + e.afterDisplayState);

		// 最小化の場合のみ
		if ( e.afterDisplayState == "minimized" ) {
			this.visible = false;
		}

	}

	// *********************************************************
	// アプリケーション終了
	// *********************************************************
	private function exitApp():void {

		mx.core.Application.application.nativeApplication.icon.bitmaps = [];
		// 終了
		mx.core.Application.application.exit(); 

	}


]]>
</mx:Script>


<mx:Image id="dr" source="@Embed('dr.png')" />

<mx:HBox>
	<mx:TextInput id="data" width="400"	/>
	<mx:Button  
		id="btn"  
		label="参照"  
	/>
</mx:HBox>


</mx:Window>
Mainw.mxml の メニュー追加
		// セパレータ
		menuItem = nativeMenu.addItem(new NativeMenuItem("", true));
		// 最小化
		menuItem = nativeMenu.addItem(new NativeMenuItem("最小化"));
		menuItem.addEventListener(flash.events.Event.SELECT,
			function():void {
				win.minimize();
				win.visible = false;
			}
		);
		// 元に戻す
		menuItem = nativeMenu.addItem(new NativeMenuItem("元に戻す"));
		menuItem.addEventListener(flash.events.Event.SELECT,
			function():void {
				win.visible = true;
				win.restore(); 
			}
		);