AIR 的顯示螢幕

Adobe AIR 1.0 以及更新的版本

您可以使用 Adobe® AIR® Screen 類別來存取連接至電腦或裝置的顯示螢幕相關資訊。

AIR 顯示螢幕基本概念

螢幕 API 只包含一個 Screen 類別,可提供靜態成員來取得系統螢幕資訊,並供實體成員來描述特定螢幕。

一個電腦系統可以連接多個監視器或顯示螢幕,對應於多個排列於虛擬空間中的桌面螢幕。AIR Screen 類別提供有關螢幕、螢幕相對排列方式,以及螢幕可用空間等資訊。如果有多個監視器對應至相同的螢幕,則只會有一個螢幕。如果螢幕的大小大於監視器的顯示區,則沒有辦法判斷目前可見區域所屬的螢幕部分為何。

螢幕代表獨立的桌面顯示區。螢幕通常是虛擬桌面之中的矩形區。主要顯示畫面的螢幕左上角指定為虛擬桌面座標系統的起點。用來描述螢幕的所有值都會以像素為單位。

檢視完整大小的圖形
在這種螢幕排列法之下,兩個螢幕會同時出現在虛擬桌面上。主螢幕 (#1) 左上角的座標永遠都是 (0,0)。如果螢幕排列法變更為將螢幕 #2 指定為主螢幕,則螢幕 #1 的座標就會變成負值。回報螢幕的可用邊界時,會排除選單列、工作列和停駐列。

如需螢幕 API 類別、方法、屬性和事件的詳細資訊,請參閱適用於 Adobe Flash Platform 的 ActionScript 3.0 參考

列舉螢幕

您可以使用下列 Screen 方法和屬性,列舉虛擬桌面的螢幕:

方法或屬性

說明

Screen.screens

提供用來描述可用螢幕的 Screen 物件。陣列的順序並不重要。

Screen.mainScreen

為主螢幕提供 Screen 物件。在 Mac OS X 上,主螢幕是顯示選單列的螢幕。在 Windows 上,主螢幕是系統指定的主要螢幕。

Screen.getScreensForRectangle()

提供用來描述與指定矩形相交之螢幕的 Screen 物件陣列。傳遞給這個方法的矩形為虛擬桌面上的像素座標。如果沒有螢幕與矩形相交,陣列就是空的。您可以使用這個方法,找出顯示視窗的螢幕。

請勿儲存由 Screen 類別方法和屬性所傳回的值。因為,使用者或作業系統隨時都可以變更可用的螢幕及其排列方式。

下列範例會使用螢幕 API,在多個螢幕之間移動視窗,以回應按下方向鍵的動作。為了將視窗移至下一個螢幕,此範例會取得 screens 陣列,並依水平或垂直方向排序 (取決於所按的方向鍵)。然後,程式碼會逐步執行已排序的陣列,將每個螢幕的座標與目前螢幕的座標進行比較。為了識別視窗的目前螢幕,此範例會呼叫 Screen.getScreensForRectangle(),傳入視窗邊界。

package { 
    import flash.display.Sprite; 
    import flash.display.Screen; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
     
    public class ScreenExample extends Sprite 
    { 
        public function ScreenExample() 
        { 
                stage.align = StageAlign.TOP_LEFT; 
                stage.scaleMode = StageScaleMode.NO_SCALE; 
                 
                stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey); 
        } 
     
        private function onKey(event:KeyboardEvent):void{ 
            if(Screen.screens.length > 1){ 
                switch(event.keyCode){ 
                    case Keyboard.LEFT : 
                        moveLeft(); 
                        break; 
                    case Keyboard.RIGHT : 
                        moveRight(); 
                        break; 
                    case Keyboard.UP : 
                        moveUp(); 
                        break; 
                    case Keyboard.DOWN : 
                        moveDown(); 
                        break; 
                }     
            } 
        }     
                 
        private function moveLeft():void{ 
            var currentScreen = getCurrentScreen(); 
            var left:Array = Screen.screens; 
            left.sort(sortHorizontal); 
            for(var i:int = 0; i < left.length - 1; i++){ 
                if(left[i].bounds.left < stage.nativeWindow.bounds.left){ 
                    stage.nativeWindow.x +=  
                        left[i].bounds.left - currentScreen.bounds.left; 
                    stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top; 
                } 
            }  
        } 
         
        private function moveRight():void{ 
            var currentScreen:Screen = getCurrentScreen(); 
            var left:Array = Screen.screens; 
            left.sort(sortHorizontal); 
            for(var i:int = left.length - 1; i > 0; i--){ 
                if(left[i].bounds.left > stage.nativeWindow.bounds.left){ 
                    stage.nativeWindow.x +=  
                        left[i].bounds.left - currentScreen.bounds.left; 
                    stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top; 
                } 
            }  
        } 
 
        private function moveUp():void{ 
            var currentScreen:Screen = getCurrentScreen(); 
            var top:Array = Screen.screens; 
            top.sort(sortVertical); 
            for(var i:int = 0; i < top.length - 1; i++){ 
                if(top[i].bounds.top < stage.nativeWindow.bounds.top){ 
                    stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left; 
                    stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top; 
                    break; 
                } 
            }  
        } 
 
        private function moveDown():void{ 
            var currentScreen:Screen = getCurrentScreen(); 
             
            var top:Array = Screen.screens; 
            top.sort(sortVertical); 
            for(var i:int = top.length - 1; i > 0; i--){ 
                if(top[i].bounds.top > stage.nativeWindow.bounds.top){ 
                    stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left; 
                    stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top; 
                    break; 
                } 
            }  
        } 
         
        private function sortHorizontal(a:Screen,b:Screen):int{ 
            if (a.bounds.left > b.bounds.left){ 
                return 1; 
            } else if (a.bounds.left < b.bounds.left){ 
                return -1; 
            } else {return 0;} 
        } 
         
        private function sortVertical(a:Screen,b:Screen):int{ 
            if (a.bounds.top > b.bounds.top){ 
                return 1; 
            } else if (a.bounds.top < b.bounds.top){ 
                return -1; 
            } else {return 0;} 
        } 
         
        private function getCurrentScreen():Screen{ 
            var current:Screen; 
            var screens:Array = Screen.getScreensForRectangle(stage.nativeWindow.bounds); 
            (screens.length > 0) ? current = screens[0] : current = Screen.mainScreen; 
            return current; 
        }         
    } 
}