Anzeigebildschirme in AIR

Adobe 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 ActionScript 3.0-Referenzhandbuch für die Adobe Flash-Plattform .

Aufzählen von Bildschirmen

Sie können die Bildschirme des virtuellen Desktops mit den folgenden screen-Methoden und -Eigenschaften aufzählen:

Methode oder Eigenschaft

Beschreibung

Screen.screens

Stellt ein Array von Screen-Objekten bereit, die die verfügbaren Screens beschreiben. Die Reihenfolge des Arrays spielt keine Rolle.

Screen.mainScreen

Stellt ein Screen-Objekt für den Hauptbildschirm bereit. Unter Mac OS X ist der Hauptbildschirm der Bildschirm, auf dem die Menüleiste angezeigt wird. Unter Windows ist der Hauptbildschirm der vom System festgelegte Primärbildschirm.

Screen.getScreensForRectangle()

Stellt ein Array von Screen-Objekten bereit, das die von einem gegebenen Rechteck geschnittenen Bildschirme beschreibt. Das an diese Methode übergebene Rechteck wird auf dem virtuellen Desktop in Pixelkoordintaten wiedergegeben. Wenn kein Bildschirm das Rechteck schneidet, ist das Array leer. Mit dieser Methode können Sie herausfinden, in welchen Bildschirmen ein Fenster angezeigt wird.

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