您可以使用 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;
}
}
}
|
|
|