関連ページ  
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
01.<?xml version="1.0" encoding="utf-8"?>
02.<mx:Window
03.    xmlns:mx="http://www.adobe.com/2006/mxml"
04. 
05.    type="utility"
06.    systemChrome="none"
07.    transparent="false"
08.    showFlexChrome="true"
09. 
10.    initialize="initData();"
11.    creationComplete="initApp1()"
12.    applicationActivate="initApp2()"
13. 
14.    visible="true"
15.    usePreloader="true"
16. 
17.    backgroundAlpha="1"
18. 
19.    alwaysInFront="false"
20. 
21.    title="Flex"
22.    titleIcon="@Embed('icon.png')"
23. 
24.    width="600"
25.    height="300"
26. 
27.    horizontalAlign="center"
28.    verticalAlign="middle"
29.>
30. 
31.<mx:Script>
32.<![CDATA[
33. 
34.    // *********************************************************
35.    // initialize
36.    // *********************************************************
37.    public function initData():void {
38. 
39.        trace("[App:beforeDisplay]");
40. 
41.    }
42. 
43.    // *********************************************************
44.    // creationComplete
45.    // *********************************************************
46.    private function initApp1():void {
47. 
48.        trace("[App:afterDisplay]");
49. 
50.    }
51. 
52.    // *********************************************************
53.    // applicationComplete
54.    // *********************************************************
55.    private function initApp2():void {
56. 
57.        trace("[App:start]");
58. 
59.        dr.setFocus();
60. 
61.    }
62. 
63. 
64.]]>
65.</mx:Script>
66. 
67. 
68.<mx:Image id="dr" source="@Embed('dr.png')" />
69. 
70.<mx:HBox>
71.    <mx:TextInput id="data" width="400"  />
72.    <mx:Button 
73.        id="btn" 
74.        label="参照" 
75.    />
76.</mx:HBox>
77. 
78. 
79.</mx:Window>
呼び出し部分
01.import LboxWindow;
02. 
03.public var win:LboxWindow = new LboxWindow();
04.public var rect:Rectangle;
05.public var primaryScreen:Screen;
06. 
07.// *********************************************************
08.// initialize
09.// *********************************************************
10.public function initData():void {
11. 
12.    trace("[App:beforeDisplay]");
13. 
14.    // *********************************************************
15.    // 表示レイアウトが完成する前に、
16.    // タイトルのアイコンを Image に転送しておきます
17.    // initApp1 では正しいビットマップが作成されません
18.    // *********************************************************
19.    app_icon.source = Object(this.titleIcon);
20. 
21.    primaryScreen = Screen.mainScreen;
22.    rect = primaryScreen.bounds;
23. 
24.    win.open();
25.    win.nativeWindow.x = (rect.width-this.nativeWindow.width)/2;
26.    win.nativeWindow.y = (rect.height-this.nativeWindow.height)/2 - 200;
27.}
type="lightweight" では、systemChrome は none でのみ動作します。
見た目の差はありませんが、マニュアルでは「最小ウインドウ」とあります。
やはり、タスクバーに表示されません。
type="lightweight"





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

実際バグっぽい動きもしますので、最小化した場合は「非表示」にし、
システムトレイのメニューに「元のサイズに戻す」を実装します。
001.<?xml version="1.0" encoding="utf-8"?>
002.<mx:Window
003.    xmlns:mx="http://www.adobe.com/2006/mxml"
004. 
005.    type="utility"
006.    systemChrome="none"
007.    transparent="false"
008.    showFlexChrome="true"
009. 
010.    initialize="initData();"
011.    creationComplete="initApp1()"
012.    applicationActivate="initApp2()"
013. 
014.    visible="true"
015.    usePreloader="true"
016. 
017.    backgroundAlpha="1"
018. 
019.    alwaysInFront="false"
020. 
021.    title="Flex"
022.    titleIcon="@Embed('icon.png')"
023. 
024.    width="600"
025.    height="300"
026. 
027.    horizontalAlign="center"
028.    verticalAlign="middle"
029. 
030.    minimizable="true"
031.    maximizable="false"
032. 
033.    displayStateChange="miniAction(event)"
034.    close="exitApp()"
035.>
036. 
037.<mx:Script>
038.<![CDATA[
039. 
040.    // *********************************************************
041.    // initialize
042.    // *********************************************************
043.    public function initData():void {
044. 
045.        trace("[App:beforeDisplay]");
046. 
047.    }
048. 
049.    // *********************************************************
050.    // creationComplete
051.    // *********************************************************
052.    private function initApp1():void {
053. 
054.        trace("[App:afterDisplay]");
055. 
056.    }
057. 
058.    // *********************************************************
059.    // applicationComplete
060.    // *********************************************************
061.    private function initApp2():void {
062. 
063.        trace("[App:start]");
064. 
065.        dr.setFocus();
066. 
067.    }
068. 
069.    // *********************************************************
070.    // 最小化の処理
071.    // *********************************************************
072.    private function miniAction( e:flash.events.NativeWindowDisplayStateEvent ):void {
073. 
074.        trace("[State] : " + e.afterDisplayState);
075. 
076.        // 最小化の場合のみ
077.        if ( e.afterDisplayState == "minimized" ) {
078.            this.visible = false;
079.        }
080. 
081.    }
082. 
083.    // *********************************************************
084.    // アプリケーション終了
085.    // *********************************************************
086.    private function exitApp():void {
087. 
088.        mx.core.Application.application.nativeApplication.icon.bitmaps = [];
089.        // 終了
090.        mx.core.Application.application.exit();
091. 
092.    }
093. 
094. 
095.]]>
096.</mx:Script>
097. 
098. 
099.<mx:Image id="dr" source="@Embed('dr.png')" />
100. 
101.<mx:HBox>
102.    <mx:TextInput id="data" width="400"  />
103.    <mx:Button 
104.        id="btn" 
105.        label="参照" 
106.    />
107.</mx:HBox>
108. 
109. 
110.</mx:Window>
Mainw.mxml の メニュー追加
01.// セパレータ
02.menuItem = nativeMenu.addItem(new NativeMenuItem("", true));
03.// 最小化
04.menuItem = nativeMenu.addItem(new NativeMenuItem("最小化"));
05.menuItem.addEventListener(flash.events.Event.SELECT,
06.    function():void {
07.        win.minimize();
08.        win.visible = false;
09.    }
10.);
11.// 元に戻す
12.menuItem = nativeMenu.addItem(new NativeMenuItem("元に戻す"));
13.menuItem.addEventListener(flash.events.Event.SELECT,
14.    function():void {
15.        win.visible = true;
16.        win.restore();
17.    }
18.);