ウィンドウの管理



デスクトップウィンドウの外観、動作、ライフサイクルを管理するには、NativeWindow クラスのプロパティとメソッドを使用します。

NativeWindow インスタンスの取得

ウィンドウを操作するには、最初にウィンドウインスタンスを取得する必要があります。ウィンドウインスタンスは、次のいずれかの場所から取得できます。

ウィンドウコンストラクタ
つまり、新しい NativeWindow のウィンドウコンストラクタ。

ウィンドウステージ
つまり、stage.nativeWindow

ステージ上の表示オブジェクト
つまり、myDisplayObject.stage.nativeWindow

ウィンドウイベント
イベントオブジェクトの target プロパティは、イベントを送出したウィンドウを示しています。

HTMLLoader ウィンドウまたは HTML ウィンドウのグローバル nativeWindow プロパティ
つまり、window.nativeWindow

nativeApplication オブジェクト
NativeApplication.nativeApplication.activeWindow は、アプリケーションのアクティブなウィンドウを示しています(ただし、アクティブなウィンドウが AIR アプリケーションのウィンドウでない場合は、null を返します)。NativeApplication.nativeApplication.openedWindows 配列には、AIR アプリケーション内で閉じられていないすべてのウィンドウが格納されています。

ウィンドウのアクティブ化、表示、非表示

ウィンドウをアクティブ化するには、NativeWindow の activate() メソッドを呼び出します。ウィンドウをアクティブ化すると、ウィンドウが前面になり、キーボードとマウスのフォーカスが設定され、必要な場合は、ウィンドウを復元するか、または visible プロパティを true に設定することでウィンドウが表示されるようになります。あるウィンドウをアクティブ化しても、アプリケーション内での他のウィンドウの順序は変わりません。activate() メソッドを呼び出すと、ウィンドウは activate イベントを送出します。

非表示になっているウィンドウをアクティブ化しないで表示するには、visible プロパティを true に設定します。これによりウィンドウは前面になりますが、フォーカスがウィンドウに割り当てられることはありません。

ウィンドウを非表示にするには、visible プロパティを false に設定します。ウィンドウを非表示にすると、ウィンドウ、関連するタスクバーアイコン、および MacOS X ではウィンドウメニューのエントリが表示されなくなります。

注意: Mac OS X では、ドックアイコンのある最小化されたウィンドウを完全に非表示にすることはできません。最小化されたウィンドウの visible プロパティを false に設定しても、そのウィンドウのドックアイコンは表示されています。ユーザがアイコンをクリックすると、ウィンドウは復元されて表示されるようになります。

ウィンドウの表示順序の変更

AIR では、ウィンドウの表示順序を複数の方法で直接変更できます。ウィンドウの表示順序の前面は背面に移動したり、ウィンドウを別のウィンドウの前や後に移動したりできます。同時に、ウィンドウをアクティブ化することでウィンドウの順序を変更することもできます。

alwaysInFront プロパティを true に設定することで、あるウィンドウを他のウィンドウより前面に保つことができます。複数のウィンドウでこのプロパティを設定すると、それらのウィンドウの間では表示順序が並べ替えられますが、alwaysInFront が false に設定されているウィンドウよりは常に前面に配置されます。また、最上位グループのウィンドウは、AIR アプリケーションがアクティブではない場合でも、他のアプリケーションのウィンドウより前面に表示されます。この動作はユーザにとっては迷惑である場合があるので、alwaysInFronttrue に設定するのは、それが必要であって適切である場合にのみ行う必要があります。例えば、次のような場合には使用が正当化されます。

  • ツールチップ、ポップアップリスト、カスタムメニュー、コンボボックスなどのコントロール用の一時的なポップアップウィンドウ。これらのウィンドウはフォーカスを失ったときに閉じる必要があるので、別のウィンドウの表示の邪魔になるのを避けることができます。

  • 特に緊急を要するエラーメッセージと警告。ユーザが直ちに応答しないと元に戻すことのできない変更が発生する可能性がある場合は、警告ウィンドウを最前面に移動してもかまいません。ただし、ほとんどのエラーと警告は、通常のウィンドウ表示順序で処理できます。

  • 短時間だけ表示されるトーストスタイルのウィンドウ。

注意: AIR では、alwaysInFront プロパティの適切な使用は強制されません。ただし、ユーザのワークフローを妨害するようなアプリケーションは、ごみ箱行きになることでしょう。

NativeWindow クラスには、ウィンドウ間の相対的な表示順序を設定する次のプロパティとメソッドが用意されています。

メンバー

説明

alwaysInFront プロパティ

ウィンドウを最上位ウィンドウグループに表示するかどうかを指定します。

通常は、false が最善の設定です。値を false から true に変更すると、そのウィンドウは他のウィンドウの前面に移動します(ただし、アクティブにはなりません)。値を true から false に変更すると、そのウィンドウは最上位グループに残っているウィンドウの背後に移動しますが、他のウィンドウよりは前面になっています。プロパティをウィンドウの現在値と同じ値に設定すると、ウィンドウの表示順序は変わりません。

orderToFront()

ウィンドウを前面に移動します。

orderInFrontOf()

ウィンドウを特定のウィンドウのすぐ前面に表示します。

orderToBack()

ウィンドウを他のウィンドウの背後に移動します。

orderBehind()

ウィンドウを特定のウィンドウのすぐ背後に表示します。

activate()

ウィンドウを前面に移動します(同時に、ウィンドウを表示状態にしてフォーカスを割り当てます)。

注意: ウィンドウが非表示状態(visiblefalse)または最小化状態の場合は、表示順序メソッドを呼び出しても順序は変更されません。

ウィンドウを閉じる

ウィンドウを閉じるには、NativeWindow.close() メソッドを使用します。

ウィンドウを閉じると、ウィンドウのコンテンツの読み込みは解除されますが、他のオブジェクトがそのコンテンツを参照している場合は、コンテンツオブジェクトは破棄されません。NativeWindow.close() メソッドは非同期に実行するので、ウィンドウに含まれるアプリケーションは、閉じる処理が行われている間も実行を続けます。閉じる操作が完了すると、close メソッドは close イベントを送出します。NativeWindow オブジェクトは技術的にはまだ有効な状態ですが、閉じられたウィンドウのほとんどのプロパティとメソッドは、アクセスすると IllegalOperationError が生成されます。閉じられたウィンドウを再び開くことはできません。ウィンドウが閉じられているかどうかを確認するには、ウィンドウの closed プロパティを調べます。単にウィンドウを非表示にするには、NativeWindow.visible プロパティを false に設定します。

Nativeapplication.autoExit プロパティが true の場合は(デフォルト)、最後のウィンドウが閉じるとアプリケーションは終了します。

ウィンドウ操作のキャンセルの許可

ウィンドウがシステムクロムを使用している場合は、適切なイベントをリッスンし、イベントのデフォルト動作をキャンセルすることで、ユーザによるウィンドウの操作をキャンセルできます。例えば、ユーザがシステムクロムの閉じるボタンをクリックすると、closing イベントが送出されます。登録されているリスナーがイベントの preventDefault() メソッドを呼び出すと、ウィンドウは閉じません。

ウィンドウがシステムクロムを使用していない場合は、目的の変更が行われる前に変更の通知イベントが自動的に送出されることはありません。したがって、ウィンドウを閉じたり、ウィンドウの状態を変更したり、ウィンドウ境界プロパティを設定したりするメソッドを呼び出した場合、変更はキャンセルできません。ウィンドウの変更が行われる前にアプリケーションのコンポーネントに通知するには、アプリケーションのロジックで、ウィンドウの dispatchEvent() メソッドを使用して、関連する通知イベントを送出します。

function onCloseCommand(event){ 
    var closingEvent = new air.Event(air.Event.CLOSING,true,true); 
    dispatchEvent(closingEvent); 
    if(!closingEvent.isDefaultPrevented()){ 
        win.close(); 
    } 
}

イベントの preventDefault() メソッドがリスナーによって呼び出されると、dispatchEvent() メソッドは false を返します。ただし、このメソッドは他の理由でも false を返す場合があるので、isDefaultPrevented() メソッドを明示的に使用して、変更をキャンセルする必要があるかどうかを判定するのがよい方法です。

ウィンドウの最大化、最小化、復元

ウィンドウを最大化するには、NativeWindow の maximize() メソッドを使用します。

window.nativeWindow.maximize();

ウィンドウを最小化するには、NativeWindow の minimize() メソッドを使用します。

 
window.nativeWindow.minimize();

ウィンドウを復元するには(つまり、最大化または最小化されていたウィンドウを元のサイズに戻すには)、NativeWindow の restore() メソッドを使用します。

 
window.nativeWindow.restore();
注意: AIR ウィンドウを最大化したときの動作は、Mac OS X での標準の動作とは異なります。アプリケーションで定義されている「標準」サイズとユーザが最後に設定したサイズの間で切り替えが行われるのではなく、AIR ウィンドウは、アプリケーションまたはユーザが最後に設定したサイズと、画面で使用可能な領域全体との間で切り替わります。

例:ウィンドウの最小化、最大化、復元、終了

次の短い HTML ページでは、NativeWindow の maximize()minimize()restore() および close() メソッドの使用方法を示します。

<html> 
<head> 
<title>Change Window Display State</title> 
<script src="AIRAliases.js"/> 
<script type="text/javascript"> 
     function onMaximize(){ 
         window.nativeWindow.maximize(); 
     } 
     
     function onMinimize(){ 
         window.nativeWindow.minimize(); 
     } 
     
     function onRestore(){ 
         window.nativeWindow.restore(); 
     } 
     
     function onClose(){ 
         window.nativeWindow.close(); 
     } 
</script> 
</head> 
 
<body> 
     <h1>AIR window display state commands</h1> 
         <button onClick="onMaximize()">Maximize</button> 
         <button onClick="onMinimize()">Minimize</button> 
         <button onClick="onRestore()">Restore</button> 
    <button onClick="onClose()">Close</button> 
</body> 
</html>

ウィンドウのサイズ変更と移動

ウィンドウがシステムクロムを使用している場合は、クロムがウィンドウのサイズ変更とデスクトップ上での移動に対するドラッグを制御します。システムクロムを使用しない場合は、独自のコントロールを追加して、ユーザがウィンドウのサイズ変更および移動を行うことができるようにする必要があります。

注意: ウィンドウのサイズ変更または移動を行うには、最初に、NativeWindow インスタンスに対する参照を取得する必要があります。ウィンドウの参照を取得する方法について詳しくは、NativeWindow インスタンスの取得を参照してください。

ウィンドウのサイズ変更

ウィンドウのサイズを変更するには、NativeWindow の startResize() メソッドを使用します。mouseDown イベントからこのメソッドを呼び出すと、マウスの動作に応じてサイズ変更操作が行われ、オペレーティングシステムが mouseUp イベントを受信すると完了します。startResize() を呼び出すときは、ウィンドウのサイズ変更の基準になる辺または角を指定する引数を渡します。

ウィンドウの移動

サイズを変更しないでウィンドウを移動するには、NativeWindow startMove() メソッドを使用します。startResize() メソッドと同様に、mouseDown イベントから startMove() メソッドを呼び出すと、マウスの操作に応じて移動処理が行われ、オペレーティングシステムが mouseUp イベントを受信すると完了します。

startResize() および startMove() メソッドについて詳しくは、『Adobe AIR HTML 開発者用リファレンスガイド』(http://www.adobe.com/go/learn_air_html_jslr_jp)を参照してください。

例:ウィンドウのサイズ変更と移動

次の例では、ウィンドウでのサイズ変更および移動操作を開始する方法を示します。

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<script src="AIRAliases.js"/> 
<script type="text/javascript"> 
     function onResize(type){ 
         nativeWindow.startResize(type); 
     } 
     
     function onNativeMove(){ 
         nativeWindow.startMove(); 
     } 
</script> 
<style type="text/css" media="screen"> 
 
.drag { 
    width:200px; 
    height:200px; 
    margin:0px auto; 
    padding:15px; 
    border:1px dashed #333; 
    background-color:#eee; 
    } 
 
.resize { 
    background-color:#FF0000; 
    padding:10px; 
    } 
.left { 
        float:left; 
        }     
.right { 
    float:right; 
}     
 
</style> 
<title>Move and Resize the Window</title> 
</head> 
 
<body> 
<div class="resize left" onmousedown="onResize(air.NativeWindowResize.TOP_LEFT)">Drag to resize</div> 
<div class="resize right" onmousedown="onResize(air.NativeWindowResize.TOP_RIGHT)">Drag to resize</div> 
<div class="drag" onmousedown="onNativeMove()">Drag to move</div> 
<div class="resize left" onmousedown="onResize(air.NativeWindowResize.BOTTOM_LEFT)">Drag to resize</div> 
<div class="resize right" onmousedown="onResize(air.NativeWindowResize.BOTTOM_RIGHT)">Drag to resize</div> 
</body> 
</html>