Anzeigebildschirme in AIRAdobe AIR 1.0 und höher Mit der Adobe® AIR® Screen-Klasse können Sie auf Informationen zu den Anzeigebildschirmen zugreifen, die an einen Computer oder ein Gerät angeschlossen sind. Grundlagen zu Anzeigebildschirmen in AIR
Die Screen-API enthält eine einzige Klasse, Screen, die statische Mitglieder zum Abrufen von Systembildschirminformationen und Instanzmitglieder zum Beschreiben eines bestimmten Bildschirms enthält. An ein Computersystem können mehrere Monitore oder Anzeigen angeschlossen sein, die mehreren, in einem virtuellen Raum angeordneten Desktopbildschirmen entsprechen. Die AIR-Screen-Klasse bietet Informationen zu Bildschirmen, ihrer relativen Anordnung und dem nutzbaren Anzeigebereich. Wenn einem Bildschirm mehrere Monitore zugeordnet wurden, existiert nur ein Bildschirm. Ist der Bildschirm größer als der Anzeigebereich des Monitors, können Sie nicht ermitteln, welcher Bildschirmbereich derzeit angezeigt wird. Ein Bildschirm repräsentiert einen unabhängigen Desktopanzeigebereich. Bildschirme werden innerhalb des virtuellen Desktops als Rechtecke beschrieben. Die obere linke Ecke des als primäre Anzeige festgelegten Bildschirms ist der Ursprung des virtuellen Desktopkoordinatensystems. Alle zum Beschreiben eines Bildschirms verwendeten Werte liegen in Pixeln vor. Grafik in Originalgröße anzeigen ![]() In dieser Bildschirmanordnung gibt es auf dem virtuellen Desktop zwei Bildschirme. Die Koordinaten der oberen linken Ecke des Hauptbildschirms (1) sind immer (0,0). Wird die Bildschirmanordnung geändert und Bildschirm 2 als Hauptbildschirm festgelegt, nehmen die Koordinaten von Bildschirm 1 negative Werte an. Menüleisten, Taskleisten und Docks werden beim Angeben der Begrenzungen des verwendbaren Bereichs ignoriert. Ausführliche Informationen über die Klassen, Methoden, Eigenschaften und Ereignisse der Bildschirm-API finden Sie im Handbuch ActionScript 3.0 Reference for the Adobe Flash Platform. Aufzählen von BildschirmenSie können die Bildschirme des virtuellen Desktops mit den folgenden screen-Methoden und -Eigenschaften aufzählen:
Speichern Sie die von den Methoden und Eigenschaften der Screen-Klasse zurückgegebenen Werte nicht. Die verfügbaren Bildschirme und deren Anordnung können jederzeit durch den Benutzer oder das Betriebssystem geändert werden. Das folgende Beispiel verschiebt ein Fenster beim Betätigen der Pfeiltasten mithilfe der Bildschirm-API zwischen mehreren Bildschirmen. Um das Fenster zum nächsten Bildschirm zu verschieben, wird im Beispiel das screens-Array abgerufen und (je nach betätigter Pfeiltaste) vertikal oder horizontal sortiert. Der Code geht danach das sortierte Array durch und verlgeicht jeden Bildschirm mit den Koordinaten des aktuellen Bildschirms. Zum Identifizieren des aktuellen Bildschirms des Fensters ruft das Beispiel Screen.getScreensForRectangle() auf und übergibt die Fenstergrenzen. 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;
}
}
}
|
|