ウィンドウの管理Adobe AIR 1.0 およびそれ以降 デスクトップウィンドウの外観、動作、ライフサイクルを管理するには、NativeWindow クラスのプロパティとメソッドを使用します。 注意: Flex フレームワークを使用する場合は、一般にフレームワーククラスを使用してウィンドウ動作を管理する方が適切です。NativeWindow のほとんどのプロパティおよびメソッドには、mx:WindowedApplication および mx:Window クラスを使用してアクセスできます。
NativeWindow インスタンスの取得ウィンドウを操作するには、最初にウィンドウインスタンスを取得する必要があります。ウィンドウインスタンスは、次のいずれかの場所から取得できます。
Flex の mx:WindowedApplication オブジェクトと mx:Window オブジェクトは表示オブジェクトなので、次に示すように、stage プロパティを使用して、MXML ファイル内のアプリケーションウィンドウを簡単に参照できます。 <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="init();"> <mx:Script> <![CDATA[ import flash.display.NativeWindow; public function init():void{ var appWindow:NativeWindow = this.stage.nativeWindow; //set window properties appWindow.visible = true; } ]]> </mx:Script> </WindowedApplication 注意: WindowedApplication コンポーネントまたは Window コンポーネントが Flex フレームワークによってウィンドウステージに追加されるまで、コンポーネントの stage プロパティは null です。この動作は、Flex Application コンポーネントの動作と同じですが、creationComplete などの WindowedApplication および Window コンポーネントの初期化サイクルの早い段階で発生するイベントに対するリスナーでは、ステージまたは NativeWindow インスタンスにアクセスできないことを意味します。applicationComplete イベントが送出された時点では、ステージおよび NativeWindow インスタンスにアクセスしても安全です。
ウィンドウのアクティブ化、表示、非表示ウィンドウをアクティブ化するには、NativeWindow の activate() メソッドを呼び出します。ウィンドウをアクティブ化すると、ウィンドウが前面になり、キーボードとマウスのフォーカスが設定され、必要な場合は、ウィンドウを復元するか、または visible プロパティを true に設定することでウィンドウが表示されるようになります。あるウィンドウをアクティブ化しても、アプリケーション内での他のウィンドウの順序は変わりません。activate() メソッドを呼び出すと、ウィンドウは activate イベントを送出します。 非表示になっているウィンドウをアクティブ化しないで表示するには、visible プロパティを true に設定します。これによりウィンドウは前面になりますが、フォーカスがウィンドウに割り当てられることはありません。 ウィンドウを非表示にするには、visible プロパティを false に設定します。ウィンドウを非表示にすると、ウィンドウ、関連するタスクバーアイコン、および MacOS X ではウィンドウメニューのエントリが表示されなくなります。 ウィンドウの可視性を変更すると、このウィンドウが所有するすべてのウィンドウの可視性も同様に変更されます。例えば、ウィンドウを非表示にすると、そのウィンドウが所有しているウィンドウもすべて非表示になります。 注意: Mac OS X では、ドックのウィンドウ部分にアイコンがある最小化されたウィンドウを完全に非表示にすることはできません。最小化されたウィンドウの visible プロパティを false に設定しても、そのウィンドウのドックアイコンは表示されています。ユーザーがアイコンをクリックすると、ウィンドウは復元されて表示されるようになります。
ウィンドウの表示順序の変更AIR では、ウィンドウの表示順序を複数の方法で直接変更できます。ウィンドウの表示順序の前面は背面に移動したり、ウィンドウを別のウィンドウの前や後に移動したりできます。同時に、ウィンドウをアクティブ化することでウィンドウの順序を変更することもできます。 alwaysInFront プロパティを true に設定することで、あるウィンドウを他のウィンドウより前面に保つことができます。このように設定されたウィンドウが複数ある場合、同じ設定のウィンドウ間で表示順序が並べ替えられます。ただし、それらのウィンドウは、alwaysInFront が false に設定されたウィンドウよりは常に前面に配置されます。 また、最上位グループのウィンドウは、AIR アプリケーションがアクティブではない場合でも、他のアプリケーションのウィンドウより前面に表示されます。この動作はユーザーにとっては迷惑である場合があるので、alwaysInFront を true に設定するのは、それが必要であって適切である場合にのみ行う必要があります。例えば、次のような場合には使用が正当化されます。
注意: AIR では、alwaysInFront プロパティの適切な使用は強制されません。ただし、ユーザーのワークフローを妨害するようなアプリケーションは、ごみ箱行きになることでしょう。
ウィンドウが他のウィンドウを所有している場合、所有下にあるウィンドウは常に所有者のウィンドウより前に配置されるように並べ替えられます。他のウィンドウを所有するウィンドウで orderToFront() を呼び出したり、alwaysInFront を true に設定した場合、所有下にあるウィンドウも所有者ウィンドウと一緒に並べ替えられ、他のウィンドウの前面に配置されます。ただし、所有下にあるウィンドウは、所有者ウィンドウの前面に引き続き表示されます。 所有下にあるウィンドウからウィンドウの並べ替えメソッドを呼び出した場合、所有者ウィンドウが同じであるウィンドウ間では通常通り動作します。ただし、所有下にあるウィンドウのグループ全体が、そのグループ以外のウィンドウと比較され、並べ替えられることがあります。例えば、所有下にあるウィンドウから orderToFront() を呼び出すと、そのウィンドウ自身、その所有者、所有者が同じであるその他すべてのウィンドウが、ウィンドウ表示順序の前面に移動します。 NativeWindow クラスには、ウィンドウ間の相対的な表示順序を設定する次のプロパティとメソッドが用意されています。
注意: ウィンドウが非表示状態(visible が false)または最小化状態の場合は、表示順序メソッドを呼び出しても順序は変更されません。
Linux オペレーティングシステムでは、別のウィンドウマネージャーにより、ウィンドウの表示順序に関する別の規則が適用されます。
ウィンドウを閉じるウィンドウを閉じるには、NativeWindow.close() メソッドを使用します。 ウィンドウを閉じると、ウィンドウのコンテンツの読み込みは解除されますが、他のオブジェクトがそのコンテンツを参照している場合は、コンテンツオブジェクトは破棄されません。NativeWindow.close() メソッドは非同期に実行するので、ウィンドウに含まれるアプリケーションは、閉じる処理が行われている間も実行を続けます。閉じる操作が完了すると、close メソッドは close イベントを送出します。NativeWindow オブジェクトは技術的にはまだ有効な状態ですが、閉じられたウィンドウのほとんどのプロパティとメソッドは、アクセスすると IllegalOperationError が生成されます。閉じられたウィンドウを再び開くことはできません。ウィンドウが閉じられているかどうかを確認するには、ウィンドウの closed プロパティを調べます。単にウィンドウを非表示にするには、NativeWindow.visible プロパティを false に設定します。 Nativeapplication.autoExit プロパティが true の場合は(デフォルト)、最後のウィンドウが閉じるとアプリケーションは終了します。 所有下にあるウィンドウは、所有者が閉じられたときに一緒に閉じます。所有下にあるウィンドウからは closing イベントが送出されないため、閉じる処理を取り消すことはできません。close イベントは送出されます。 ウィンドウ操作のキャンセルの許可ウィンドウがシステムクロムを使用している場合は、適切なイベントをリッスンし、イベントのデフォルト動作をキャンセルすることで、ユーザーによるウィンドウの操作をキャンセルできます。例えば、ユーザーがシステムクロムの閉じるボタンをクリックすると、closing イベントが送出されます。登録されているリスナーがイベントの preventDefault() メソッドを呼び出すと、ウィンドウは閉じません。 ウィンドウがシステムクロムを使用していない場合は、目的の変更が行われる前に変更の通知イベントが自動的に送出されることはありません。したがって、ウィンドウを閉じたり、ウィンドウの状態を変更したり、ウィンドウ境界プロパティを設定したりするメソッドを呼び出した場合、変更はキャンセルできません。ウィンドウの変更が行われる前にアプリケーションのコンポーネントに通知するには、アプリケーションのロジックで、ウィンドウの dispatchEvent() メソッドを使用して、関連する通知イベントを送出します。 例えば、次のロジックは、ウィンドウの閉じるボタンに対するキャンセル可能なイベントハンドラーを実装しています。 public function onCloseCommand(event:MouseEvent):void{ var closingEvent:Event = new Event(Event.CLOSING,true,true); dispatchEvent(closing); if(!closingEvent.isDefaultPrevented()){ win.close(); } } イベントの preventDefault() メソッドがリスナーによって呼び出されると、dispatchEvent() メソッドは false を返します。ただし、このメソッドは他の理由でも false を返す場合があるので、isDefaultPrevented() メソッドを明示的に使用して、変更をキャンセルする必要があるかどうかを判定するのがよい方法です。 ウィンドウの最大化、最小化、復元ウィンドウを最大化するには、NativeWindow の maximize() メソッドを使用します。 myWindow.maximize(); ウィンドウを最小化するには、NativeWindow の minimize() メソッドを使用します。 myWindow.minimize(); ウィンドウを復元するには(つまり、最大化または最小化されていたウィンドウを元のサイズに戻すには)、NativeWindow の restore() メソッドを使用します。 myWindow.restore(); 所有下にあるウィンドウは、所有者ウィンドウが最小化または復元されたときに、一緒に最小化または復元されます。所有者の最小化に伴い最小化される際には、所有下にあるウィンドウからはイベントは送出されません。 注意: AIR ウィンドウを最大化したときの動作は、Mac OS X での標準の動作とは異なります。アプリケーションで定義されている「標準」サイズとユーザーが最後に設定したサイズの間で切り替えが行われるのではなく、AIR ウィンドウは、アプリケーションまたはユーザーが最後に設定したサイズと、画面で使用可能な領域全体との間で切り替わります。
Linux オペレーティングシステムでは、別のウィンドウマネージャーにより、ウィンドウの表示状態の設定に関する別の規則が適用されます。
注意: Linux では、ウィンドウプロパティは非同期で変更されます。プログラムのある行で表示状態を変更し、次の行で値を読み取る場合、読み取られた値には古い値が反映されます。すべてのプラットフォームで、表示状態が変更されると、NativeWindow オブジェクトから displayStateChange イベントが送出されます。ウィンドウの新しい状態に基づいて何らかのアクションを実行する必要がある場合、常に displayStateChange イベントハンドラーで行ってください。ウィンドウイベントのリッスンを参照してください。
例:ウィンドウの最小化、最大化、復元、終了次の短い MXML アプリケーションでは、Window の maximize()、minimize()、restore() および close() メソッドの使用方法を示します。 <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"> <mx:Script> <![CDATA[ public function minimizeWindow():void { this.stage.nativeWindow.minimize(); } public function maximizeWindow():void { this.stage.nativeWindow.maximize(); } public function restoreWindow():void { this.stage.nativeWindow.restore(); } public function closeWindow():void { this.stage.nativeWindow.close(); } ]]> </mx:Script> <mx:VBox> <mx:Button label="Minimize" click="minimizeWindow()"/> <mx:Button label="Restore" click="restoreWindow()"/> <mx:Button label="Maximize" click="maximizeWindow()"/> <mx:Button label="Close" click="closeWindow()"/> </mx:VBox> </mx:WindowedApplication> 次に示す Flash 用の ActionScript の例では、NativeWindow の minimize()、maximize()、restore() および close() メソッドをトリガーする 4 つのクリック可能なテキストフィールドを作成しています。 package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.text.TextField; public class MinimizeExample extends Sprite { public function MinimizeExample():void { var minTextBtn:TextField = new TextField(); minTextBtn.x = 10; minTextBtn.y = 10; minTextBtn.text = "Minimize"; minTextBtn.background = true; minTextBtn.border = true; minTextBtn.selectable = false; addChild(minTextBtn); minTextBtn.addEventListener(MouseEvent.CLICK, onMinimize); var maxTextBtn:TextField = new TextField(); maxTextBtn.x = 120; maxTextBtn.y = 10; maxTextBtn.text = "Maximize"; maxTextBtn.background = true; maxTextBtn.border = true; maxTextBtn.selectable = false; addChild(maxTextBtn); maxTextBtn.addEventListener(MouseEvent.CLICK, onMaximize); var restoreTextBtn:TextField = new TextField(); restoreTextBtn.x = 230; restoreTextBtn.y = 10; restoreTextBtn.text = "Restore"; restoreTextBtn.background = true; restoreTextBtn.border = true; restoreTextBtn.selectable = false; addChild(restoreTextBtn); restoreTextBtn.addEventListener(MouseEvent.CLICK, onRestore); var closeTextBtn:TextField = new TextField(); closeTextBtn.x = 340; closeTextBtn.y = 10; closeTextBtn.text = "Close Window"; closeTextBtn.background = true; closeTextBtn.border = true; closeTextBtn.selectable = false; addChild(closeTextBtn); closeTextBtn.addEventListener(MouseEvent.CLICK, onCloseWindow); } function onMinimize(event:MouseEvent):void { this.stage.nativeWindow.minimize(); } function onMaximize(event:MouseEvent):void { this.stage.nativeWindow.maximize(); } function onRestore(event:MouseEvent):void { this.stage.nativeWindow.restore(); } function onCloseWindow(event:MouseEvent):void { this.stage.nativeWindow.close(); } } } ウィンドウのサイズ変更と移動ウィンドウがシステムクロムを使用している場合は、クロムがウィンドウのサイズ変更とデスクトップ上での移動に対するドラッグを制御します。システムクロムを使用しない場合は、独自のコントロールを追加して、ユーザーがウィンドウのサイズ変更および移動を行うことができるようにする必要があります。 注意: ウィンドウのサイズ変更または移動を行うには、最初に、NativeWindow インスタンスに対する参照を取得する必要があります。ウィンドウの参照を取得する方法について詳しくは、NativeWindow インスタンスの取得を参照してください。
ウィンドウのサイズ変更ユーザーがインタラクティブにウィンドウのサイズを変更できるようにするには、NativeWindow の startResize() メソッドを使用します。mouseDown イベントからこのメソッドを呼び出すと、マウスの動作に応じてサイズ変更操作が行われ、オペレーティングシステムが mouseUp イベントを受信すると完了します。startResize() を呼び出すときは、ウィンドウのサイズ変更の基準になる辺または角を指定する引数を渡します。 ウィンドウサイズをプログラムによって設定するには、ウィンドウの width、height または bounds の各プロパティを目的のサイズに設定します。境界を設定すると、ウィンドウのサイズと位置をすべて同時に変更できます。ただし、変更が行われる順序は保証されません。一部の Linux ウィンドウマネージャーでは、デスクトップ画面の境界の外側にウィンドウを拡張することはできません。このような場合、プロパティの設定順序により、通常は変更の純粋な影響により正式なウィンドウが作成される場合でも、最終的なウィンドウのサイズが制限される可能性があります。例えば、画面の下部付近でウィンドウの高さと y 位置の両方を変更する場合、y 位置の変更の前に高さの変更が適用されると、高さが完全に変更されない可能性があります。 注意: Linux では、ウィンドウプロパティは非同期で変更されます。プログラムのある行でウィンドウのサイズを変更し、次の行でサイズを読み取る場合、読み取られた値には古い値が反映されます。すべてのプラットフォームで、ウィンドウのサイズが変更されると、NativeWindow オブジェクトから resize イベントが送出されます。ウィンドウの新しいサイズまたは状態に基づいて何らかのアクション(ウィンドウ内のコントロールのレイアウトなど)を実行する必要がある場合、常に resize イベントハンドラーで行ってください。ウィンドウイベントのリッスンを参照してください。
ステージのスケールモードにより、ウィンドウのサイズが変更されるときのウィンドウステージとそのコンテンツの動作が決まります。ステージのスケールモードは、アプリケーションが表示領域のサイズや縦横比を制御しない Web ブラウザーのような状況を対象に設計されていることに注意してください。一般に、ステージの scaleMode プロパティを StageScaleMode.NO_SCALE に設定すると、最善の結果が得られます。ウィンドウのコンテンツを拡大縮小する必要がある場合は、ウィンドウの境界の変更に呼応してコンテンツの scaleX および scaleY パラメーターを設定してもかまいません。 ウィンドウの移動サイズを変更しないでウィンドウを移動するには、NativeWindow startMove() メソッドを使用します。startResize() メソッドと同様に、mouseDown イベントから startMove() メソッドを呼び出すと、マウスの操作に応じて移動処理が行われ、オペレーティングシステムが mouseUp イベントを受信すると完了します。 startResize() メソッドおよび startMove() メソッドについて詳しくは、『Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド』を参照してください。 ウィンドウをプログラムによって移動するには、ウィンドウの x、y または bounds の各プロパティを目的の位置に設定します。境界を設定すると、ウィンドウのサイズと位置を両方同時に変更できます。 注意: Linux では、ウィンドウプロパティは非同期で変更されます。プログラムのある行でウィンドウを移動し、次の行で位置を読み取る場合、読み取られた値には古い値が反映されます。すべてのプラットフォームで、位置が変更されると、NativeWindow オブジェクトから move イベントが送出されます。ウィンドウの新しい位置に基づいて何らかのアクションを実行する必要がある場合、常に move イベントハンドラーで行ってください。ウィンドウイベントのリッスンを参照してください。
例:ウィンドウのサイズ変更と移動次の例では、ウィンドウでのサイズ変更および移動操作を開始する方法を示します。 package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.display.NativeWindowResize; public class NativeWindowResizeExample extends Sprite { public function NativeWindowResizeExample():void { // Fills a background area. this.graphics.beginFill(0xFFFFFF); this.graphics.drawRect(0, 0, 400, 300); this.graphics.endFill(); // Creates a square area where a mouse down will start the resize. var resizeHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, this.height - 20); resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartResize); // Creates a square area where a mouse down will start the move. var moveHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, 0); moveHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartMove); } public function createSprite(color:int, size:int, x:int, y:int):Sprite { var s:Sprite = new Sprite(); s.graphics.beginFill(color); s.graphics.drawRect(0, 0, size, size); s.graphics.endFill(); s.x = x; s.y = y; this.addChild(s); return s; } public function onStartResize(event:MouseEvent):void { this.stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT); } public function onStartMove(event:MouseEvent):void { this.stage.nativeWindow.startMove(); } } } |
![]() |