Adobe AIR プログラミング講座

 

NativeWindow クラスについて

 


■NativeWindow クラスについて


NativeWindow クラスは、ウィンドウに関する機能がまとまっています。
 

■NativeWindow に対応しているか調べる


NativeWindow をサポートしているか調べるには、NativeWindow.isSupported プロパティを使用します。
 
true であれば利用可能です。
 
この確認用のプロパティは、Adobe AIR 2.0 以降で利用可能です。
 
モバイルなどの環境で動作させる場合、NativeWindow の機能をサポートしていない事があります。
 
NativeWindow をサポートしているか調べる

import flash.display.NativeWindow;
import flash.text.TextField;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

text_field.text = "NativeWindow のサポート:" + NativeWindow.isSupported;
 

■ステージと関連付けられている NativeWindow オブジェクトを取得する


stage の nativeWindow プロパティを使用すると、関連付けられている NativeWindow オブジェクトを取得できます。
 
「タイムライン内 (Adobe Flash)」や、「メインクラス内 (AIR SDK)」の stage.nativeWindow から、AIR アプリケーション起動時に作成されるウィンドウにアクセスできます。
 
ステージと関連付けられている NativeWindow オブジェクトを取得する

import flash.display.NativeWindow;

var window : NativeWindow = stage.nativeWindow;
 

■現在アクティブな NativeWindow オブジェクトを取得する


現在アクティブな、NativeWindow を取得するには、 NativeApplication.nativeApplication.activeWindow プロパティを使用します。
 
現在アクティブな、NativeWindow オブジェクトを取得する

import flash.desktop.NativeApplication;
import flash.display.NativeWindow;

var app : NativeApplication = NativeApplication.nativeApplication;
var window : NativeWindow = app.activeWindow;
 

■現在のアプリケーションが開いている、すべての NativeWindow オブジェクトを取得する


現在のアプリケーションが開いている、すべての NativeWindow を取得するには、 NativeApplication.nativeApplication.openedWindows プロパティを使用します。
 
配列としてまとめて取得できます。
 
現在のアプリケーションが開いている、すべての NativeWindow オブジェクトを取得する

import flash.desktop.NativeApplication;
import flash.display.NativeWindow;

var app : NativeApplication = NativeApplication.nativeApplication;
var windows : Array = app.openedWindows;

var i:int;
var num:int = windows.length;
for(i=0;i < num;i++){
	var window : NativeWindow = windows[i];
	trace(window);
}
 


 

ウィンドウを作成する

 


■ウィンドウの初期化用の設定


ウィンドウの初期化用の設定を行うには、NativeWindowInitOptions クラスを使用します。
 
new 演算子を使ってインスタンス化します。
 
NativeWindowInitOptions オブジェクトを作成

import flash.display.NativeWindowInitOptions;

var window_options:NativeWindowInitOptions = new NativeWindowInitOptions();
 

■NativeWindowInitOptions クラスのプロパティについて


NativeWindowInitOptions オブジェクトには、以下のプロパティがあります。
 
ここで設定する値は、ウィンドウ生成後に変更することはできません
 
プロパティ名説明
minimizableBoolean最小化を有効にするか
maximizableBoolean最大化を有効にするか
resizableBooleanサイズ変更を有効にするか
transparentBoolean背景が透明なウィンドウを有効にするか
typeNativeWindowTypeウィンドウタイプの設定
systemChromeNativeWindowSystemChromeシステムクロムの設定
renderModeNativeWindowRenderModeレンダリングモードの設定
ownerNativeWindow自身のウィンドウを子としたい場合、親となる NativeWindow オブジェクトを指定(Adobe AIR 2.6 以降)
 
■透過設定 (transparent プロパティ)

transparent プロパティに true を指定すると、背景が透明なウィンドウを作成することができます。
 
true を指定する場合、systemChrome に NativeWindowSystemChrome.NONE をセットする必要があります。
 
true false
 
「背景が透明なウィンドウ」に対応しているか調べるには、NativeWindow.supportsTransparency プロパティを使用します。
 
true であれば、「背景が透明なウィンドウ」の作成が可能です。
 
flase であれば、背景が黒色になります。
 
■ウィンドウのタイプについて (type プロパティ)

ウィンドウタイプには、以下の種類があります。
 
NativeWindowType.LIGHTWEIGHT を指定する場合、systemChrome に NativeWindowSystemChrome.NONE をセットする必要があります。
 
定数文字列説明
NativeWindowType.NORMAL"normal"通常のウィンドウ
NativeWindowType.UTILITY"utility"ユーティリティ用ウィンドウ(ツールなど)
NativeWindowType.LIGHTWEIGHT"lightweight"最小ウィンドウ
 
NORMAL UTILITY LIGHTWEIGHT
 
■システムクロムについて (systemChrome プロパティ)

システムクロムには、以下の種類があります。
 
定数文字列説明
NativeWindowSystemChrome.STANDARD"standard"OS の外観付きウィンドウ
NativeWindowSystemChrome.NONE"none"OS の外観無しウィンドウ(枠無し)
 
STANDARD NONE
 
■レンダーモードについて (renderMode プロパティ)

レンダーモードについてには、以下の種類があります。
 
定数文字列説明
NativeWindowRenderMode.AUTO"auto"デフォルトの設定、最適な値に設定される
NativeWindowRenderMode.CPU"cpu"CPU モード
NativeWindowRenderMode.DIRECT"direct"ダイレクトモード
NativeWindowRenderMode.GPU"gpu"GPU モード
 
■オーナーについて (owner プロパティ) (Adobe AIR 2.6 以降)

ウィンドウに親子関係を設定したい場合、 owner プロパティに、親となる NativeWindow オブジェクトを指定します。
 
親子関係を設定した場合、自身のウィンドウが、親ウィンドウよりも常に手前に表示されるようになります。
 
また、親ウィンドウを閉じると子ウィンドウも連動してすべて閉じられます
 
ツールウィンドウの作成などに利用します。
 
 

■ウィンドウを作成する


ウィンドウを作成するには、NativeWindow クラスを使用します。
 
new 演算子を使ってインスタンス化します。
 
引数に、NativeWindowInitOptions オブジェクトを渡します。
 
スタンダードなウィンドウを作成

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;

// ウィンドウの初期化用の設定
var window_options:NativeWindowInitOptions = new NativeWindowInitOptions();

// ウィンドウを作成
var window:NativeWindow = new NativeWindow(window_options);
window.visible = true;
 
ダイアログベースのウィンドウを作成

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;

// ウィンドウの初期化用の設定
var window_options:NativeWindowInitOptions = new NativeWindowInitOptions();
window_options.minimizable = false;	// 最小化を有効にするか
window_options.maximizable = false;	// 最大化を有効にするか
window_options.resizable = false;	// サイズ変更を有効にするか

// ウィンドウを作成
var window:NativeWindow = new NativeWindow(window_options);
window.visible = true;
window.width = 480;
window.height = 320;
 
親子関係のあるユーティリティ用ウィンドウを作成 (Adobe AIR 2.6 以降)

import flash.desktop.NativeApplication;
import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;
import flash.display.NativeWindowType;

// ------------------------------------------------------------
// 親ウィンドウ
// ------------------------------------------------------------
// スタンダートなウィンドウを作成
var parent_window:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
parent_window.visible = true;


// ------------------------------------------------------------
// ユーティリティウィンドウ その1
// ------------------------------------------------------------
// ウィンドウの初期化用の設定
var window_options_a:NativeWindowInitOptions = new NativeWindowInitOptions();
window_options_a.type = NativeWindowType.UTILITY;	// ウィンドウタイプ
window_options_a.owner = parent_window;			// 親ウィンドウを指定

// ウィンドウを作成
var window_a:NativeWindow = new NativeWindow(window_options_a);
window_a.visible = true;
window_a.width = 180;
window_a.height = 180;


// ------------------------------------------------------------
// ユーティリティウィンドウ その2
// ------------------------------------------------------------
// ウィンドウの初期化用の設定
var window_options_b:NativeWindowInitOptions = new NativeWindowInitOptions();
window_options_b.type = NativeWindowType.UTILITY;	// ウィンドウタイプ
window_options_b.owner = parent_window;			// 親ウィンドウを指定

// ウィンドウを作成
var window_b:NativeWindow = new NativeWindow(window_options_b);
window_b.visible = true;
window_b.width = 180;
window_b.height = 180;
 
透過ウィンドウを作成

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindowSystemChrome;
import flash.display.NativeWindow;
import flash.display.Shape;
import flash.display.Graphics;
import flash.display.StageScaleMode;
import flash.display.StageAlign;

// ウィンドウの初期化用の設定
var window_options:NativeWindowInitOptions = new NativeWindowInitOptions();
window_options.transparent = true;			// 透過設定
window_options.systemChrome = NativeWindowSystemChrome.NONE;	// システムクロムの設定


// ウィンドウを作成
var window:NativeWindow = new NativeWindow(window_options);
window.visible = true;
window.width = 480;
window.height = 320;
window.stage.scaleMode = StageScaleMode.NO_SCALE;
window.stage.align = StageAlign.TOP_LEFT;

// 楕円をレンダリング
var shape:Shape = new Shape();
window.stage.addChild(shape);
var g:Graphics = shape.graphics;
g.lineStyle (1, 0x000000, 1.0);
g.beginFill (0xFF0000, 1.0);
g.drawEllipse  ( 0, 0 , 480 , 320);
 

■ウィンドウを可視表示する


ウィンドウの新規作成後は、ウィンドウが非表示な状態となっています。
 
可視表示に設定するには、visible プロパティに true をセットします。
 
スタンダードなウィンドウを作成して表示する

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;

// ウィンドウを作成
var window:NativeWindow = new NativeWindow(new NativeWindowInitOptions());

// ウィンドウを可視表示に設定する
window.visible = true;
 
activate() メソッドを呼び出して、ウィンドウをアクティブな状態にしても可視表示にすることができます。
 
スタンダードなウィンドウを作成してアクティブにする

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;

// ウィンドウを作成
var window:NativeWindow = new NativeWindow(new NativeWindowInitOptions());

// ウィンドウをアクティブに設定する
window.activate();
 

■ウィンドウから「Stage オブジェクト」にアクセスする


Adobe AIR では、ウィンドウごとに「Stage オブジェクト」が存在します。
 
任意のウィンドウの「Stage オブジェクト」を取得するには、stage プロパティを使用します。
 
スタンダードなウィンドウを作成して、「Stage オブジェクト」を取得する

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;
import flash.display.Stage;

// ウィンドウを作成
var window:NativeWindow = new NativeWindow(new NativeWindowInitOptions());

// ウィンドウを可視表示に設定する
window.visible = true;

// ウィンドウが保有するステージオブジェクトを取得
var stage_obj:Stage = window.stage;
trace(stage_obj);
 
ここから、スプライトやシェイプなどの表示オブジェクトを、表示リストに登録していきます。
 
スタンダードなウィンドウを作成して、「Stage オブジェクト」を取得し、楕円をレンダリングする

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;
import flash.display.Stage;
import flash.display.Shape;
import flash.display.Graphics;
import flash.display.StageScaleMode;
import flash.display.StageAlign;

// ウィンドウを作成
var window:NativeWindow = new NativeWindow(new NativeWindowInitOptions());

// ウィンドウを可視表示に設定する
window.visible = true;
window.width = 400;
window.height = 300;

// ウィンドウが保有するステージオブジェクトを取得
var stage_obj:Stage = window.stage;

stage_obj.scaleMode = StageScaleMode.NO_SCALE;
stage_obj.align = StageAlign.TOP_LEFT;

// シェイプを作成
var shape:Shape = new Shape();
// シェイプをステージの表示リストに登録
stage_obj.addChild(shape);

// 楕円をレンダリング
var g:Graphics = shape.graphics;
g.lineStyle (1, 0x000000, 1.0);
g.beginFill (0xFF0000, 1.0);
g.drawEllipse  ( 0, 0 , 200 , 100);
 

■タイトルを変更する


タイトルを変更するには、title プロパティを使用します。
 
ウィンドウのタイトル部分に表示したい文字列を指定します。
 
「アプリ起動時に作成されるウィンドウ」のタイトルを変更する

import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// タイトルを変更する
window.title = "テストタイトル";
 


 

ウィンドウを閉じる

 


■プログラムからウィンドウを閉じる


プログラムからウィンドウを閉じるには、close() メソッドを使用します。
 
「アプリ起動時に作成されるウィンドウ」を閉じる

import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウを閉じる
window.close();
 

■ウィンドウが閉じられる瞬間を調べる


ウィンドウが閉じられる瞬間を調べるには、Event.CLOSING イベントを使用します。
 
AIR アプリケーションの終了をキャンセルしたい場合は、引数から得られる Event オブジェクトの preventDefault() メソッドを実行します。
 
「アプリ起動時に作成されるウィンドウ」が閉じられる瞬間を調べる

import flash.events.Event;
import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウが閉じられる瞬間に実行されるイベント
window.addEventListener(Event.CLOSING , function (e:Event):void{

	trace("ウィンドウが閉じられる瞬間");

	// 閉じられる処理をキャンセルする
	e.preventDefault();

});
 
close() メソッドを呼び出した場合、Event.CLOSING イベントは呼び出されません。
 

■ウィンドウが閉じられる処理が完了したかを調べる


ウィンドウが閉じられる処理が完了したかを調べるには、Event.CLOSE イベントを使用します。
 
「アプリ起動時に作成されるウィンドウ」が閉じられたか調べる

import flash.events.Event;
import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウが閉じられる処理が完了したときに実行されるイベント
window.addEventListener(Event.CLOSE , function (e:Event):void{

	trace("ウィンドウが閉じられた");

});
 
また、closed プロパティを使用して調べることもできます。
 
true であれば、閉じられています。
 
ウィンドウが閉じられたか調べる

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;
import flash.events.Event;

// ウィンドウを作成
var window:NativeWindow = new NativeWindow(new NativeWindowInitOptions());

// ウィンドウを可視表示に設定する
window.visible = true;

// ウィンドウが閉じられる処理が完了したときに実行されるイベント
addEventListener(Event.ENTER_FRAME , function (e:Event):void{

	trace("ウィンドウが閉じられたか:" + window.closed);

});
 

■ウィンドウを閉じずに再利用する


ウィンドウが完全に閉じられた後で、NativeWindow のメソッドやプロパティを呼び出すとエラーが発生します。
 
ウィンドウを閉じてしまうと NativeWindow オブジェクトの再利用はできません
 
そこで Event.CLOSING イベント内で、閉じる動作をキャンセルし、ウィンドウを非表示にします
 
「アプリ起動時に作成されるウィンドウ」が閉じられる瞬間を調べる

import flash.events.Event;
import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウが閉じられる瞬間に実行されるイベント
window.addEventListener(Event.CLOSING , function (e:Event):void{

	// 閉じられる処理をキャンセルする
	e.preventDefault();

	// ウィンドウを非表示に変更する
	window.vislble = false;
});
 
任意のタイミングで、ウィンドウを可視表示に戻します
 
「アプリ起動時に作成されるウィンドウ」を可視表示に変更する

import flash.events.Event;
import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウを可視表示に変更する
window.vislble = true;
 


 

ウィンドウのサイズを制御する

 
 


■ウィンドウの位置を制御する


ウィンドウの位置を変更するには、x プロパティy プロパティを使用します。
 
左上を原点とした、デスクトップ上の座標系に配置されます。
 
ウィンドウの基点は、左上端です。
 
x プロパティから、 x 座標を変更できます
 
y プロパティから、 y 座標を変更できます。
 
 
「アプリ起動時に作成されるウィンドウ」を原点に移動する

import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// 位置を変更する
window.x = 0;
window.y = 0;
 

■ウィンドウのサイズを制御する


ウィンドウのサイズを変更するには、width プロパティheight プロパティを使用します。
 
width プロパティから、 ウィンドウの幅を変更できます
 
height プロパティから、ウィンドウの高さを変更できます。
 
サイズには、ウィンドウの枠分が含まれます。
 
ステージの幅と高さとは異なるので注意します。
 
 
「アプリ起動時に作成されるウィンドウ」のサイズを変更する

import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// サイズを変更する
window.width = 320;
window.height = 240;
 
■設定可能なサイズの制限値を取得する

設定可能なサイズの最小値を取得するには、minSize プロパティを使用します。
 
設定可能なサイズの最大値を取得するには、maxSize プロパティを使用します。
 
中身は Point 型の変数です。
 
「アプリ起動時に作成されるウィンドウ」の設定可能なサイズの制限値を取得する

import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// 設定可能なサイズの制限値を取得
trace("幅の最小値:" + window.minSize.x);
trace("幅の最大値:" + window.maxSize.x);
trace("高さの最小値:" + window.minSize.y);
trace("高さの最大値:" + window.maxSize.y);
 
■ウィンドウの枠のサイズを取得する

「ウィンドウのサイズ」から「ステージのサイズ」を減算すると、ウィンドウの枠のサイズが計算できます。
 
「アプリ起動時に作成されるウィンドウ」の「OS の外観の枠」のサイズを計算する

import flash.display.NativeWindow;
import flash.display.Stage;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウが保有するステージオブジェクトを取得
var stage_obj:Stage = window.stage;

// OS の外観の枠のサイズ
var system_chrome_width:Number  = window.width  - stage_obj.stageWidth;
var system_chrome_height:Number = window.height - stage_obj.stageHeight;
 

■ウィンドウのサイズを矩形指定で制御する


ウィンドウのサイズを Rectangle 型で変更するには、bounds プロパティを使用します。
 
サイズには、ウィンドウの枠分が含まれます。
 
ステージの幅と高さとは異なるので注意します。
 
 
「アプリ起動時に作成されるウィンドウ」のサイズを矩形指定で変更する

import flash.display.NativeWindow;
import flash.geom.Rectangle;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// 矩形情報を用意する
var rect:Rectangle = new Rectangle();
rect.x = 100;		// x 座標
rect.y = 200;		// y 座標
rect.width = 320;	// 幅
rect.height = 240;	// 高さ

// Rectangle 指定でサイズを変更する
window.bounds = rect;
 

■ウィンドウを最小化する


ウィンドウを最小化するには、minimize() メソッドを使用します。
 
「アプリ起動時に作成されるウィンドウ」を最小化する

import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウを最小化する
window.minimize();
 

■ウィンドウを最大化する


ウィンドウを最大化するには、maximize() メソッドを使用します。
 
「アプリ起動時に作成されるウィンドウ」を最大化する

import flash.display.NativeWindow;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウを最大化する
window.maximize();
 

■最小化、最大化の状態から元のサイズに戻す


最小化、最大化した状態から元のサイズに戻すには、restore() メソッドを使用します。
 
「アプリ起動時に作成されるウィンドウ」をクリック時に元のサイズに戻す

import flash.display.NativeWindow;
import flash.events.MouseEvent;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウを最大化する
window.maximize();

// マウスボタンを離したときに実行されるイベント
window.stage.addEventListener(MouseEvent.MOUSE_UP , function (e:MouseEvent):void{

	// ウィンドウを元のサイズに戻す
	window.restore();

});
 

■ウィンドウの移動操作を開始する


ウィンドウの移動操作を開始するには、startMove() メソッドを使用します。
 
マウスボタンを押した瞬間に実行するといいでしょう。
 
「アプリ起動時に作成されるウィンドウ」をクリック時に移動操作を開始する

import flash.display.NativeWindow;
import flash.events.MouseEvent;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// マウスボタンを押したときに実行されるイベント
window.stage.addEventListener(MouseEvent.MOUSE_DOWN , function (e:MouseEvent):void{

	// ウィンドウの移動操作を開始する
	window.startMove();

});
 

■ウィンドウのサイズ変更操作を開始する


ウィンドウのサイズ変更操作を開始するには、startResize() メソッドを使用します。
 
引数に、NativeWindowResize 定数を指定します。
 
定数文字列説明
NativeWindowResize.TOP_LEFT"TL"ウィンドウの上端と左端を移動してサイズを変更する
NativeWindowResize.TOP"T"ウィンドウの上端を移動してサイズを変更する
NativeWindowResize.TOP_RIGHT"TR"ウィンドウの上端と右端を移動してサイズを変更する
NativeWindowResize.LEFT"L"ウィンドウの左端を移動してサイズを変更する
NativeWindowResize.NONE""すべての端に対応したサイズ変更
NativeWindowResize.RIGHT"R"ウィンドウの右端を移動してサイズを変更する
NativeWindowResize.BOTTOM_LEFT"BL"ウィンドウの下端と左端を移動してサイズを変更する
NativeWindowResize.BOTTOM"B"ウィンドウの下端を移動してサイズを変更する
NativeWindowResize.BOTTOM_RIGHT"BR"ウィンドウの下端と右端を移動してサイズを変更する
 
「マウスボタンを押した瞬間」や、「キーボードを押した瞬間」に実行するといいでしょう。
 
「アプリ起動時に作成されるウィンドウ」をクリック時にサイズ変更操作を開始する

import flash.display.NativeWindow;
import flash.display.NativeWindowResize;
import flash.events.MouseEvent;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// マウスボタンを押したときに実行されるイベント
window.stage.addEventListener(MouseEvent.MOUSE_DOWN , function (e:MouseEvent):void{

	// ウィンドウをサイズ変更操作を開始する
	window.startResize(NativeWindowResize.BOTTOM_RIGHT);

});
 

■ウィンドウが移動したか調べる


ウィンドウが移動中か調べるには、NativeWindowBoundsEvent.MOVING イベントを使用します。
 
ウィンドウの移動ををキャンセルしたい場合は、引数から得られる NativeWindowBoundsEvent オブジェクトの preventDefault() メソッドを実行します。
 
ウィンドウの移動が完了したか調べるには、NativeWindowBoundsEvent.MOVE イベントを使用します。
 
「アプリ起動時に作成されるウィンドウ」の移動を検出する

import flash.display.NativeWindow;
import flash.events.NativeWindowBoundsEvent;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウを移動中に実行されるイベント
window.addEventListener(NativeWindowBoundsEvent.MOVING , function (e:NativeWindowBoundsEvent):void{

	trace("ウィンドウ移動中 (x:" + window.x +" y:" + window.y);

	// ウィンドウの移動をキャンセルする
	//e.preventDefault();

});

// ウィンドウの移動完了時に実行されるイベント
window.addEventListener(NativeWindowBoundsEvent.MOVE , function (e:NativeWindowBoundsEvent):void{

	trace("ウィンドウの移動が完了 (x:" + window.x +" y:" + window.y);

});
 

■ウィンドウのサイズが変化したか調べる


ウィンドウがリサイズ中か調べるには、NativeWindowBoundsEvent.RESIZING イベントを使用します。
 
ウィンドウのリサイズををキャンセルしたい場合は、引数から得られる NativeWindowBoundsEvent オブジェクトの preventDefault() メソッドを実行します。
 
ウィンドウのリサイズが完了したか調べるには、NativeWindowBoundsEvent.RESIZE イベントを使用します。
 
「アプリ起動時に作成されるウィンドウ」のリサイズを検出する

import flash.display.NativeWindow;
import flash.events.NativeWindowBoundsEvent;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// ウィンドウをリサイズ中に実行されるイベント
window.addEventListener(NativeWindowBoundsEvent.RESIZING , function (e:NativeWindowBoundsEvent):void{

	trace("ウィンドウリサイズ中 (x:" + window.x +" y:" + window.y +" w:" + window.width +" h:" + window.height);

	// ウィンドウのリサイズをキャンセルする
	//e.preventDefault();

});

// ウィンドウのリサイズ完了時に実行されるイベント
window.addEventListener(NativeWindowBoundsEvent.RESIZE , function (e:NativeWindowBoundsEvent):void{

	trace("ウィンドウのリサイズが完了 (x:" + window.x +" y:" + window.y +" w:" + window.width +" h:" + window.height);

});
 


 

ウィンドウの奥行きを制御する

 
 


■ウィンドウを「すべてのウィンドウ」より前面に移動する


ウィンドウを、すべてのウィンドウより前面に移動するには、orderToFront() メソッドを使用します。
 
ウィンドウAを、すべてのウィンドウより前面に移動する

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;
import flash.geom.Rectangle;
import flash.events.MouseEvent;

// マウスボタンを離したときに実行されるイベント
stage.addEventListener(MouseEvent.MOUSE_UP , function callee(e:MouseEvent):void{

	// ------------------------------------------------------------
	// ウィンドウAを作成
	// ------------------------------------------------------------
	var window_a:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_a.title = "ウィンドウA";
	window_a.bounds = new Rectangle(100,100,400,300);
	window_a.activate();

	// ------------------------------------------------------------
	// ウィンドウBを作成
	// ------------------------------------------------------------
	var window_b:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_b.title = "ウィンドウB";
	window_b.bounds = new Rectangle(150,150,400,300);
	window_b.activate();

	// ------------------------------------------------------------
	// ウィンドウCを作成
	// ------------------------------------------------------------
	var window_c:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_c.title = "ウィンドウC";
	window_c.bounds = new Rectangle(200,200,400,300);
	window_c.activate();

	// ウィンドウAをすべてのウィンドウより前面に移動
	window_a.orderToFront();


	// イベントのリッスンを終了する(1度だけ実行したいので)
	e.currentTarget.removeEventListener(e.type , callee);
});
 

■ウィンドウを「すべてのウィンドウ」より後面に移動する


ウィンドウを、すべてのウィンドウより後面に移動するには、orderToBack() メソッドを使用します。
 
ウィンドウCを、すべてのウィンドウより背面に移動する

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;
import flash.geom.Rectangle;
import flash.events.MouseEvent;

// マウスボタンを離したときに実行されるイベント
stage.addEventListener(MouseEvent.MOUSE_UP , function callee(e:MouseEvent):void{

	// ------------------------------------------------------------
	// ウィンドウAを作成
	// ------------------------------------------------------------
	var window_a:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_a.title = "ウィンドウA";
	window_a.bounds = new Rectangle(100,100,400,300);
	window_a.activate();

	// ------------------------------------------------------------
	// ウィンドウBを作成
	// ------------------------------------------------------------
	var window_b:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_b.title = "ウィンドウB";
	window_b.bounds = new Rectangle(150,150,400,300);
	window_b.activate();

	// ------------------------------------------------------------
	// ウィンドウCを作成
	// ------------------------------------------------------------
	var window_c:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_c.title = "ウィンドウC";
	window_c.bounds = new Rectangle(200,200,400,300);
	window_c.activate();

	// ウィンドウCをすべてのウィンドウより背面に移動
	window_c.orderToBack();


	// イベントのリッスンを終了する(1度だけ実行したいので)
	e.currentTarget.removeEventListener(e.type , callee);
});
 

■ウィンドウを「任意のウィンドウ」の1つ前面に移動する


ウィンドウを、任意のウィンドウから1つ前面に移動するには、orderInFrontOf() メソッドを使用します。
 
引数に、対象となる NativeWindow オブジェクトを指定します。
 
ウィンドウAを、ウィンドウBから1つ前面に移動する

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;
import flash.geom.Rectangle;
import flash.events.MouseEvent;

// マウスボタンを離したときに実行されるイベント
stage.addEventListener(MouseEvent.MOUSE_UP , function callee(e:MouseEvent):void{

	// ------------------------------------------------------------
	// ウィンドウAを作成
	// ------------------------------------------------------------
	var window_a:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_a.title = "ウィンドウA";
	window_a.bounds = new Rectangle(100,100,400,300);
	window_a.activate();

	// ------------------------------------------------------------
	// ウィンドウBを作成
	// ------------------------------------------------------------
	var window_b:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_b.title = "ウィンドウB";
	window_b.bounds = new Rectangle(150,150,400,300);
	window_b.activate();

	// ------------------------------------------------------------
	// ウィンドウCを作成
	// ------------------------------------------------------------
	var window_c:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_c.title = "ウィンドウC";
	window_c.bounds = new Rectangle(200,200,400,300);
	window_c.activate();

	// ウィンドウAを、ウィンドウBから1つ前面に移動
	window_a.orderInFrontOf(window_b);


	// イベントのリッスンを終了する(1度だけ実行したいので)
	e.currentTarget.removeEventListener(e.type , callee);
});
 

■ウィンドウを「任意のウィンドウ」の1つ後面に移動する


ウィンドウを、任意のウィンドウから1つ後面に移動するには、orderInBackOf() メソッドを使用します。
 
引数に、対象となる NativeWindow オブジェクトを指定します。
 
ウィンドウAを、ウィンドウBから1つ背面に移動する

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;
import flash.geom.Rectangle;
import flash.events.MouseEvent;

// マウスボタンを離したときに実行されるイベント
stage.addEventListener(MouseEvent.MOUSE_UP , function callee(e:MouseEvent):void{

	// ------------------------------------------------------------
	// ウィンドウAを作成
	// ------------------------------------------------------------
	var window_a:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_a.title = "ウィンドウA";
	window_a.bounds = new Rectangle(100,100,400,300);
	window_a.activate();

	// ------------------------------------------------------------
	// ウィンドウBを作成
	// ------------------------------------------------------------
	var window_b:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_b.title = "ウィンドウB";
	window_b.bounds = new Rectangle(150,150,400,300);
	window_b.activate();

	// ------------------------------------------------------------
	// ウィンドウCを作成
	// ------------------------------------------------------------
	var window_c:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_c.title = "ウィンドウC";
	window_c.bounds = new Rectangle(200,200,400,300);
	window_c.activate();

	// ウィンドウCを、ウィンドウBから1つ背面に移動
	window_c.orderInBackOf(window_b);


	// イベントのリッスンを終了する(1度だけ実行したいので)
	e.currentTarget.removeEventListener(e.type , callee);
});
 

■ウィンドウを常に最前面に表示する


ウィンドウを、常に手前に表示するには、alwaysInFront プロパティを使用します。
 
true であれば、ウィンドウが常に最前面に表示されるようになります。
 
「アプリ起動時に作成されるウィンドウ」を常に最前面に表示する

import flash.display.NativeWindow;
import flash.events.NativeWindowBoundsEvent;

// 「アプリ起動時に作成されるウィンドウ」を取得
var window:NativeWindow = stage.nativeWindow;

// 常に最前面に表示する
window.alwaysInFront = true;
 


 

ウィンドウの視覚的通知を使用する

 


■視覚的通知に対応しているか調べる


ウィンドウが、視覚的通知に対応しているか調べるには、NativeWindow.supportsNotification プロパティを使用します。
 
true であれば、視覚的通知に対応しています。
 
Windows の場合、タスクバーのアイコンが点滅します。
 
視覚的通知をサポートしているか調べる

import flash.display.NativeWindow;
import flash.text.TextField;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

text_field.text = "視覚的通知のサポート:" + NativeWindow.supportsNotification;
 

■視覚的通知を実行する


視覚的通知を実行するには、notifyUser() メソッドを使用します。
 
引数に、NotificationType.* 定数をセットします。
 
定数文字列説明
NotificationType.INFORMATIONAL"informational"通常の情報の通達
NotificationType.CRITICAL"critical"重要な情報の通達
 
ウィンドウを作成し、視覚的通知を実行する

import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindow;
import flash.desktop.NotificationType;
import flash.geom.Rectangle;
import flash.events.MouseEvent;

// マウスボタンを離したときに実行されるイベント
stage.addEventListener(MouseEvent.MOUSE_UP , function callee(e:MouseEvent):void{

	// ------------------------------------------------------------
	// ウィンドウAを作成
	// ------------------------------------------------------------
	var window_a:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_a.title = "ウィンドウA";
	window_a.bounds = new Rectangle(100,100,400,300);
	window_a.activate();

	// ------------------------------------------------------------
	// ウィンドウBを作成
	// ------------------------------------------------------------
	var window_b:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
	window_b.title = "ウィンドウB";
	window_b.bounds = new Rectangle(150,150,400,300);
	window_b.activate();

	// ウィンドウAに、視覚的通知を実行する
	window_a.notifyUser(NotificationType.INFORMATIONAL);

	// ウィンドウBに、視覚的通知を実行する
	window_b.notifyUser(NotificationType.CRITICAL);


	// イベントのリッスンを終了する(1度だけ実行したいので)
	e.currentTarget.removeEventListener(e.type , callee);
});
 


 

ウィンドウメニューを使用する

 


■ウィンドウメニューに対応しているか調べる


ウィンドウメニューに対応しているか調べるには、NativeWindow.supportsMenu プロパティを使用します。
 
true であれば、ウィンドウメニューに対応しています。
 
Windows、Linux などで利用できます。
 
ウィンドウメニューをサポートしているか調べる

import flash.display.NativeWindow;
import flash.text.TextField;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

text_field.text = "ウィンドウメニューのサポート:" + NativeWindow.supportsMenu;
 

■ウィンドウメニューを表示する


ウィンドウメニューを表示するには、menu プロパティを使用します。
 
menu プロパティに、NativeMenu オブジェクトを渡します。
 
NativeMenu クラスの使い方については、こちらで解説しています。
 
 
「アプリ起動時に作成されるウィンドウ」に、ウィンドウメニューを表示する

import flash.display.NativeWindow;
import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.events.Event;

// ウィンドウメニューをサポートしている
if(NativeWindow.supportsMenu){

	// ------------------------------------------------------------
	// サブ用メニューを作成
	// ------------------------------------------------------------
	// NativeMenu オブジェクトを作成
	var menu_child:NativeMenu = new NativeMenu();

	// 「サブアイテム0」を作成し、最後尾に登録
	var menu_child_item_0:NativeMenuItem = new NativeMenuItem("サブアイテム0");
	menu_child.addItem(menu_child_item_0);

	// 「サブアイテム1」を作成し、最後尾に登録
	var menu_child_item_1:NativeMenuItem = new NativeMenuItem("サブアイテム1");
	menu_child.addItem(menu_child_item_1);


	// ------------------------------------------------------------
	// ルート用メニューを作成
	// ------------------------------------------------------------
	// NativeMenu オブジェクトを作成
	var menu:NativeMenu = new NativeMenu();

	// メニューが選択されたときに呼び出されるイベント
	menu.addEventListener(Event.SELECT , function (e:Event):void{
		// 選択されたメニューアイテム
		var menu_item:NativeMenuItem = e.target as NativeMenuItem;
		trace(menu_item.label);
	});

	// 「ルートアイテム0」を作成し、最後尾に登録
	var menu_item_0:NativeMenuItem = new NativeMenuItem("ルートアイテム0");
	menu.addItem(menu_item_0);

	// 「ルートアイテム1」を作成し、最後尾に登録
	var menu_item_1:NativeMenuItem = new NativeMenuItem("ルートアイテム1");
	menu.addItem(menu_item_1);

	// 「ルートアイテム2」を作成し、最後尾に登録
	var menu_item_2:NativeMenuItem = new NativeMenuItem("ルートアイテム2");
	menu.addItem(menu_item_2);

	// サブメニューとして登録
	menu_item_2.submenu = menu_child;


	// ------------------------------------------------------------
	// ウィンドウメニューを表示
	// ------------------------------------------------------------
	// 「アプリ起動時に作成されるウィンドウ」を取得
	var window:NativeWindow = stage.nativeWindow;

	// ネイティブウィンドウに、ネイティブメニューを登録する
	window.menu = menu;

}