Apollo アプリケーションから新しいウインドウを開くには NativeWindow もしくはそのサブクラスのインスタンスを生成します。下は NativeWindow のコンストラクタです。
public function NativeWindow(visible:Boolean, initOptions:NativeWindowInitOptions)
NativeWindow のコンストラクタは2つの引数を取ります。
1 つ目の引数はウインドウが作成されたときに表示するかしないかのフラグです。ウインドウを作成したら表示位置や大きさなどに多少の細工を加えることも多いと思います。ウインドウが表示された状態でこれらの処理を行うと途中の段階も画面に表示されてしまいますので、とりあえずコンストラクタでは false (非表示) を指定しておいて、必要な処理が終わったら window.visible = true を呼んでウインドウを表示するというのが一般的にはよさそうですね。
同様に、アプリケーション起動時に画面に表示したくない初期処理が存在する場合は、アプリケーション記述ファイル (-app.xml) 内 rootContent タグの visible を false にしておいて適当なタイミングで window.visible = true を呼ぶことで対応できます。
2 つ目の引数はウインドウの初期化に使われるオプションを指定する NativeWindowInitOptions 型のオブジェクトです。以下のような項目が NativeWindowInitOptions クラスに定義されています。
systemChrome:String // ウインドウが使用するシステムクロームの種類 transparent:Boolean // ウインドウが透けた背景を使用できるか resizable:Boolean // ウインドウの大きさを変更できるか maximizable:Boolean // ウインドウを最大化できるか minimizable:Boolean // ウインドウを最小化できるか
それぞれの属性の初期値は以下のようになっています。変更の必要があるものだけ指定すれば OK です。
systemChrome = NativeWindowSystemChrome.STANDARD; transparent = false; resizable = true; maximizable = true; minimizable = true;
systemChrome の取り得る値は NativeWindowSystemChrome クラスに定義されています。現在のアルファ版で使用できるのは以下の 2 種類だけです。
public static const STANDARD:String // OS 標準のクロームを使用 public static const NONE:String // OS のクロームを使用しない
NativeWindowSystemChrome.NONE を指定した場合はクローム無し、つまり枠の内側のみのウインドウが表示されます。
ここまでまとめに、新しいウインドウを開くときの基本的な関数のサンプルです。
public function createNewWindow():void {
// ウインドウ初期化オプションを作成
var options:NativeWindowInitOptions = new NativeWindowInitOptions();
// ここで必要に応じてオプションを設定
// ウインドウの作成
var newWindow:NativeWindow = new NativeWindow(false,options);
// ここに必要な処理を記述
// ウインドウを可視化
newWindow.visible = true;
}
owner 属性
NativeWindowInitOptions クラスには owner という属性があります。この属性には新しく作成するウインドウのオーナーとなるウインドウを指定することができます。
owner を指定してウインドウを初期化すると、作成されたウインドウは常に自身の owner の上に表示されるようになります。owner ウインドウがフォーカスされてもお互いの重なり順は変わりません。
また、owner ウインドウが閉じられるとそのウインドウを owner に持つ全てのウインドウが閉じられます。
下のサンプルでは最初のアプリケーションウインドウがアプリーケーション起動後に開いたウインドウの owner になっています。そのため、アプリケーションウインドウを閉じるといくつウインドウが開いていても全てのウインドウが閉じられ、アプリケーションが終了します。
<?xml version="1.0" encoding="utf-8"?>
<mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml" width="350" height="200">
<mx:Script>
<![CDATA[
public function createNewWindow():void {
// ウインドウ初期化オプションを作成
var options:NativeWindowInitOptions = new NativeWindowInitOptions();
options.owner = stage.window;
// ウインドウの作成
var newWindow:NativeWindow = new NativeWindow(false,options);
newWindow.width = 400;
newWindow.height = 300;
// ウインドウにテキストフィールドを追加
newWindow.stage.align = StageAlign.TOP_LEFT;
newWindow.stage.scaleMode = StageScaleMode.NO_SCALE;
var tf:TextField = new TextField();
tf.width = newWindow.width;
tf.text = "これは空のウインドウです";
newWindow.stage.addChild(tf);
// ウインドウを可視化
newWindow.visible = true;
}
]]>
</mx:Script>
<mx:Button label="ウインドウを開く" click="createNewWindow();"/>
</mx:ApolloApplication>
なお、アルファ版の制限として Flex のコンポーネントが追加できません。このサンプルではテキストフィールドを使用しています。

Leave a comment