Ekrany w środowisku AIR

Adobe AIR 1.0 i starsze wersje

Klasa Screen w środowisku Adobe® AIR® umożliwia dostęp do informacji o ekranach monitorów podłączonych do komputera lub urządzenia.

Podstawowe informacje o ekranach w środowisku AIR

Interfejs API do obsługi ekranów zawiera jedną klasę, Screen, która udostępnia elementy statyczne służące do pobierania informacji o ekranie systemowym, a także elementy instancji służące do opisywania konkretnego ekranu.

Do systemu komputerowego może być podłączonych kilka monitorów lub wyświetlaczy, które mogą odpowiadać kilku pulpitom (ekranom) tworzącym przestrzeń wirtualną. Klasa Screen środowiska AIR udostępnia informacje o ekranach, ich wzajemnym położeniu i użytecznej przestrzeni. Jeśli ten sam ekran jest wyświetlany (odwzorowany) na kilku monitorach, istnieje tylko jeden ekran logiczny. Jeśli rozmiar ekranu jest większy od obszaru wyświetlania monitora, nie ma możliwości określenia, która część ekranu jest w danej chwili widoczna.

Ekran reprezentuje niezależny obszar wyświetlanego pulpitu. Ekrany są opisane jako prostokąty na wirtualnym pulpicie. Lewy górny narożnik ekranu wyznaczonego jako monitor główny jest początkiem układu współrzędnych wirtualnego pulpitu. Wszystkie wartości opisujące ekran są podawane w pikselach.

Powiększ obraz
W tym układzie ekranów na wirtualnym pulpicie istnieją dwa ekrany. Współrzędne lewego górnego narożnika ekranu głównego (nr 1) są zawsze równe (0,0). Jeśli w wyniku zmiany układu ekranów ekran nr 2 zostanie wyznaczony jako ekran główny, współrzędne ekranu nr 1 staną się ujemne. Paski menu, paski zadań i Docki nie są uwzględniane w podawanych granicach ekranu wyznaczających obszar, z którego może korzystać aplikacja.

Szczegółowe informacje o klasie, metodach, właściwościach i zdarzeniach związanych z obsługą ekranu w interfejsie API ekranu zawiera Skorowidz języka ActionScript 3.0 dla platformy Adobe Flash .

Wyliczanie ekranów

Poniższe metody i właściwości ekranu umożliwiają wyliczenie ekranów pulpitu wirtualnego:

Metoda lub właściwość

Opis

Screen.screens

Udostępnia tablicę obiektów Screen opisujących dostępne ekrany. Kolejność obiektów w tablicy nie jest znacząca.

Screen.mainScreen

Udostępnia obiekt Screen reprezentujący ekran główny. W systemie Mac OS X ekranem głównym jest ekran, na którym jest wyświetlany pasek menu. W systemie Windows ekranem głównym jest ekran wybrany w systemie jako podstawowy.

Screen.getScreensForRectangle()

Udostępnia tablicę obiektów Screen opisujących ekrany, które przecina dany prostokąt. Prostokąt przekazywany do tej metody jest opisany współrzędnymi pikselowymi na pulpicie wirtualnym. Jeśli prostokąt nie przecina żadnych ekranów, tablica jest pusta. Metody tej można używać w celu sprawdzenia, na których ekranach jest wyświetlane określone okno.

Nie należy zapisywać wartości zwracanych przez metody i właściwości klasy Screen. Użytkownik lub system operacyjny może w dowolnym momencie zmienić dostępność i układ ekranów.

W poniższym przykładzie zastosowano interfejs API ekranów do przenoszenia okna między wieloma ekranami w odpowiedzi na naciskanie klawiszy ze strzałkami. Aby przenieść okno na następny ekran, program pobiera tablicę screens i sortuje ją pionowo lub poziomo (w zależności od tego, który klawisz ze strzałką został naciśnięty). Następnie program kolejno przechodzi przez obiekty w posortowanej tablicy i porównuje każdy ekran ze współrzędnymi ekranu bieżącego. Aby określić, na którym ekranie obecnie znajduje się okno, program wywołuje metodę Screen.getScreensForRectangle() , przekazując do niej granice okna.

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