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;
}
}
}
|
|