2012-02-06 79 views
4

我有2個AIR應用程序(AB),它們能夠通過LocalConnection對象進行通信。我已經證實,郵件確實正在被正確地發送/接收。如何管理外部應用程序中的窗口

我希望能夠有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; 
} 

如果我留在窗口模式(stage.displayState = StageDisplayState.NORMAL)這兩個應用程序,然後切換alwaysInFront實際工作。撥打activate()orderToFront()仍然無能爲力。如果我嘗試切換alwaysInFront,然後將應用程序設置爲全屏,應用程序將在我的窗口應用程序後面全屏顯示。也許在將應用設置爲全屏之前,我應該等待一個事件?

我發現一個線索提到orderToFront()只能在同一個應用程序中相對於windows工作,這就解釋了爲什麼它似乎沒有做任何事情。

有沒有人有任何見解把它拉掉?也許有一種方法可以將B嵌入到應用程序A中,因此它們實際上是相同的應用程序?我不確定如何使用AIR應用程序執行此操作,就像僅需加載SWF一樣,因爲需要外部資源。

+0

如果兩個應用程序都不是全屏幕,您是否可以重現相同的問題? – keyle 2012-02-06 22:57:56

+0

我使用窗口化的應用程序進行了一些測試,從而更新了問題。 'activate()'在文檔中明確表示它應該把窗口放在前面並獲得焦點,但我看不到任何行爲。 – 2012-02-06 23:07:18

+0

orderToBack()是否工作?我在想某種停用的窗口問題。 – keyle 2012-02-07 02:45:00

回答

2

由於沒有人提供瞭解決方案,我只是提到我正在使用的破解。基本上我有2 LocalConnection頻道,一個從AB,一個從BA。 可見程序(例如A)將褪色爲白色,將visible設置爲false,併發送消息給B放棄控制。 B已初始化爲stage.nativeWindow.visible = false,並且當它從A收到消息時,它會以全白屏幕的形式顯示,並在GUI中淡入。在A設置visiblefalse之間存在一個小的偏移,以給出B時間來顯示,否則在兩個窗口都被最小化的短暫時刻內會出現彈出。

無論如何,你去,這是醜陋的,但它實際上工作得很好。

相關問題