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 類別方法和屬性所傳回的值。因為,使用者或作業系統隨時都可以變更可用的螢幕及其排列方式。 下列範例會使用螢幕 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; } } } |
|