2012-02-06 18 views
4

LocalConnectionオブジェクト経由で通信できる2つのAIRアプリケーション(AおよびB)があります。私は、メッセージが確実に適切に送受信されていることを確認しました。外部アプリケーションでウィンドウを管理する方法

私はAを手に入れて、手前に来てください。B両方のアプリケーションはフルスクリーンです:

stage.fullScreenSourceRect = new Rectangle(0, 0, 1080, 1920); 
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

私はいくつかの順列を試しましたが、まだ何も動作していないようです。

private function initSlave(channel: String): void { 
    conn = new LocalConnection(); 
    conn.client = { 
     'activateSlave': activateSlave 
    }; 
    conn.allowDomain("*"); 
    conn.connect("_" + channel); 
} 

private function activateSlave(): void { 
    stage.nativeWindow.orderToFront(); 

    // or 

    stage.nativeWindow.activate(); 

    // or 

    stage.nativeWindow.alwaysInFront = true; 
    stage.nativeWindow.alwaysInFront = false; 
} 

私は、実際に動作するalwaysInFrontを切り替え、ウィンドウモード(stage.displayState = StageDisplayState.NORMAL)で両方のアプリケーションを残す場合。 activate()またはorderToFront()を呼び出しても何も起こりません。 alwaysInFrontをトグルしてアプリケーションをフルスクリーンに設定しようとすると、アプリケーションはウィンドウ付きのアプリケーションの後ろにフルスクリーンで表示されます。アプリをフルスクリーンに設定する前に待つべきイベントがあるのでしょうか?

orderToFront()は、同じアプリケーション内のウィンドウに対してのみ動作することが記載されているスレッドを見つけました。これは、何もしないように見える理由を説明しています。

誰にもこの問題を解決するための洞察はありますか?たぶん私はBをアプリケーションAに埋め込む方法があるので、実際には同じアプリケーションですか?私は、単に外部リソースを必要とするためSWFをロードするだけで、AIRアプリケーションでこれを行う方法がわかりません。

+0

両方のアプリがフルスクリーンでない場合、同じ問題を再現できますか? – keyle

+0

私は窓付きアプリケーションで少しのテストで質問を更新しました。 'activate()'は明示的にウィンドウを前面に持ってフォーカスを得るべきだとドキュメントで言いますが、どちらの動作も見えません。 –

+0

orderToBack()は機能しますか?私はある種の非アクティブなウィンドウの問題を考えています。 – keyle

答えて

2

誰も解決策を提示していないので、私が使用しているハックについてすぐに言及します。基本的に私は2 LocalConnectionのチャンネルを持っていて、1つはAからBまで、そして1つはBからAまでです。 可視プログラム(例:A)は白にフェードし、visiblefalseに設定し、制御を断念するメッセージをBに送信します。 Bstage.nativeWindow.visible = falseで初期化され、Aからメッセージを受け取ると、完全な白い画面として表示され、GUIでフェードします。 Aの前にわずかなオフセットがあり、visibleからfalseに設定して表示する時間はBとなります。そうでないと、両方のウィンドウが最小化されるとすぐにポップが表示されます。

とにかく、醜いですが実際にはかなりうまく動作します。

関連する問題