Zarządzanie oknami

Adobe AIR 1.0 i starsze wersje

Właściwości i metody klasy NativeWindow służą do zarządzania wyglądem, zachowaniem i cyklem życia okien pulpitu.

Uwaga: W przypadku korzystania z architektury Flex z reguły lepiej jest zarządzać zachowaniem okien przy użyciu klas architektury. Dostęp do większości właściwości i metod klasy NativeWindow można uzyskać poprzez klasy mx:WindowedApplication i mx:Window.

Pobieranie wystąpienia klasy NativeWindow

Aby manipulować oknem, należy najpierw pobrać instancję okna. Instancję okna można pobrać z jednego z następujących miejsc:

  • Konstruktor rodzimego okna używany do utworzenia okna:

    var win:NativeWindow = new NativeWindow(initOptions);
  • Właściwość nativeWindow stołu montażowego okna:

    var win:NativeWindow = stage.nativeWindow;
  • Właściwość stage obiektu wyświetlanego w oknie:

    var win:NativeWindow = displayObject.stage.nativeWindow;
  • Właściwość target zdarzenia rodzimego okna wywoływanego przez okno:

    private function onNativeWindowEvent(event:NativeWindowBoundsEvent):void 
    { 
        var win:NativeWindow = event.target as NativeWindow; 
    }
  • Właściwość nativeWindow strony HTML wyświetlanej w oknie:

    var win:NativeWindow = htmlLoader.window.nativeWindow;
  • Właściwości activeWindow i openedWindows obiektu NativeApplication:

    var nativeWin:NativeWindow = NativeApplication.nativeApplication.activeWindow; 
    var firstWindow:NativeWindow = NativeApplication.nativeApplication.openedWindows[0];

    NativeApplication.nativeApplication.activeWindow odwołuje się do aktywnego okna aplikacji (ale zwraca wartość null , jeśli aktywne okno nie jest oknem tej aplikacji AIR). Tablica NativeApplication.nativeApplication.openedWindows zawiera wszystkie okna w aplikacji AIR, które nie zostały zamknięte.

Ponieważ obiekty Application, mx:WindowedApplication i mx:Window środowiska Flex są obiektami wyświetlanymi, programista może w łatwy sposób odwołać się do okna aplikacji w pliku MXML za pomocą właściwości stage , co ilustruje poniższy przykład:

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="init();"> 
    <mx:Script> 
        <![CDATA[ 
            import flash.display.NativeWindow; 
 
            public function init():void{ 
                var appWindow:NativeWindow = this.stage.nativeWindow; 
                //set window properties 
                appWindow.visible = true; 
            } 
        ]]> 
    </mx:Script> 
</WindowedApplication
Uwaga: Dopóki składnik WindowedApplication lub Window nie zostanie dodany na stół montażowy okna przez środowisko Flex, właściwość stage składnika ma wartość null . To zachowanie jest zgodne z zachowaniem składnika Application środowiska Flex, ale oznacza, że nie jest możliwy dostęp do stołu montażowego lub instancji NativeWindow w detektorach dla zdarzeń, które występują wcześniej w cyklu inicjowania składników WindowedApplication i Window, takich jak np. creationComplete . Dostęp do stołu montażowego i instancji NativeWindow jest bezpieczny, gdy wywołane zostanie zdarzenie applicationComplete .

Aktywowanie, wyświetlanie i ukrywanie okien

Aby aktywować okno, należy wywołać metodę activate() NativeWindow. Aktywowanie okna przenosi okno na wierzch i przypisuje mu obszar aktywności dla klawiatury i myszy oraz, jeśli zachodzi taka konieczność, spowoduje, że okno stanie się widoczne, przywracając okno lub ustawiając właściwość visible na wartość true . Aktywowanie okna nie zmienia kolejności pozostałych okien w aplikacji. Wywołanie metody activate() powoduje, że okno wywołuje zdarzenie activate .

Aby wyświetlić ukryte okno, nie aktywując go, należy ustawić właściwość visible na wartość true . Spowoduje to przeniesienie okna na wierzch, ale nie przypisze do niego obszaru aktywności.

Aby ukryć okno, należy ustawić jego właściwość visible na wartość false . Ukrycie okna blokuje wyświetlanie obu elementów: okna oraz powiązanych ikon paska zadań oraz (w systemie Mac OS X) wpisu w menu Okno.

Podczas zmieniania widoczności okna zmienia się również widoczność wszystkich okien, których dane okno jest właścicielem. Na przykład w przypadku ukrycia okna są również ukrywane wszystkie okna, których okno jest właścicielem.

Uwaga: W systemie Mac OS X nie jest możliwe pełne ukrycie zminimalizowanego okna, które ma ikonę w części okna Docku. Jeśli właściwość visible ma wartość false dla zminimalizowanego okna, ikona Docku okna jest wciąż wyświetlana. Jeśli użytkownik kliknie ikonę, okno zostanie przywrócone i wyświetlone ponownie.

Zmiana kolejności wyświetlania okna

Środowisko AIR dostarcza kilka metod do bezpośredniej zmiany kolejności wyświetlania okien. Programista może przesuwać okno na wierzch lub pod spód kolejności wyświetlania; możliwe jest również przesunięcie przed lub za inne okno. W tym samym czasie użytkownik może ponownie ustawić kolejność okien, aktywując je.

Okno można zachować na wierzchu w stosunku do pozostałych okien, ustawiając jego właściwość alwaysInFront na wartość true . Jeśli więcej niż jedno okno ma to ustawienie, wówczas kolejność wyświetlania dla tych okien jest określana między nimi, ale sortowanie wykonywane jest zawsze nad oknami, dla których we właściwości alwaysInFront ustawiona została wartość false.

Okna w grupie na samym wierzchu wyświetlane są również nad oknami w innych aplikacjach, nawet jeśli aplikacja AIR nie jest aktywna. Ponieważ to zachowanie może zakłócać pracę użytkownika, ustawienie właściwości alwaysInFront na wartość true powinno być używane tylko, jeśli jest konieczne i odpowiednie. Przykłady uzasadnionych zastosowań obejmują:

  • Tymczasowe okna podręczne dla elementów sterowania np. podpowiedzi, podręczne listy, niestandardowe menu lub pola kombinowane. Ponieważ okna te powinny zostać zamknięte po utracie aktywności; w ten sposób unikniona zostanie irytacja z powodu blokowania użytkownikowi możliwości wyświetlenia innego okna.

  • Niezwykle pilne komunikaty o błędach i alerty. Wypchnięcie okna z alertem na wierzch może być uzasadnione w momencie wystąpienia nieodwołalnej zmiany i konieczności odpowiedzi na nią w odpowiednim czasie. Jednak większość błędów i alertów można obsłużyć w normalnej kolejności wyświetlania.

  • Tymczasowe okna o wyglądzie „kanapkowym”.

Uwaga: Środowisko AIR nie narzuca właściwego używania właściwości alwaysInFront . Jeśli jednak aplikacja zakłóci pracę użytkownika, prawdopodobnie aplikacja ta wyląduje w jego koszu.

Jeśli okno posiada inne okna, te okna są zawsze umieszczane przed nim. Wywołanie funkcji orderToFront() lub ustawienie dla właściwości alwaysInFront wartości true dla okna posiadającego inne okna spowoduje umieszczenie posiadanych okien wraz z oknem głównym przed innymi oknami, ale posiadane okna będą nadal wyświetlane przed oknem głównym.

Wywoływanie metod zmiany kolejności okien względem posiadanych okien działa normalnie między oknami posiadanymi przez to samo okno, ale może również doprowadzić do zmiany kolejności całej grupy posiadanych okien względem okien spoza tej grupy. Na przykład po wywołaniu klasy orderToFront() dla posiadanego okna spowoduje, że to okno, jego właściciel oraz wszystkie okna posiadane przez tego samego właściciela zostaną przesunięte do przodu w kolejności wyświetlania.

Klasa NativeWindow dostarcza następujących właściwości i metod do ustawiania kolejności wyświetlania okna względem innych okien:

Element

Opis

właściwość alwaysInFront

Określa, czy okno jest wyświetlane w grupie okien na wierzchu.

W większości przypadków wartość false jest najlepszym ustawieniem. Zmiana wartości z false na true przenosi okno na wierzch wszystkich okien (ale nie powoduje jego aktywowania). Zmiana wartości z true na false powoduje ustawienie dla okna kolejności za oknami pozostającymi w grupie na wierzchu, ale pozostawia je wciąż na górze względem innych okien. Ustawienie właściwości okna na jej bieżącą wartość nie zmienia kolejności wyświetlania okna.

Ustawienie alwaysInFront nie ma wpływu na okna posiadane przez inne okno.

orderToFront()

Przenosi okno na wierzch.

orderInFrontOf()

Przenosi okno bezpośrednio przed konkretne okno.

orderToBack()

Wysyła okno na spód za pozostałe okna.

orderBehind()

Wysyła okno bezpośrednio za konkretne okno.

activate()

Przeniesie okno na wierzch (spowoduje również, że okno stanie się widoczne i przypisze do niego obszar aktywności).

Uwaga: Jeśli okno jest ukryte (właściwość visible ma wartość false ) lub zminimalizowane, wówczas wywołanie metod dotyczących kolejności wyświetlania nie przynosi żadnego efektu.

W systemie operacyjnym Linux różne menedżery okien wymuszają różne zasady w zależności od kolejności wyświetlania okien:

  • W niektórych menedżerach okien okna utility są zawsze wyświetlane przed zwykłymi oknami.

  • W niektórych menedżerach okien okno w trybie pełnoekranowym z właściwością alwaysInFront ustawioną na wartość true jest zawsze wyświetlane przed innymi oknami, dla których właściwość alwaysInFront jest również ustawiona na wartość true .

Zamykanie okna

Aby zamknąć okno, należy użyć metody NativeWindow.close() .

Zamknięcie okna powoduje wyładowanie treści okna, ale jeśli inne obiekty mają odwołania do tej treści, obiekty treści nie zostaną zniszczone. Metoda NativeWindow.close() wykonywana jest asynchronicznie; aplikacja zawarta w oknie kontynuuje działanie podczas procesu zamykania. Metoda close wywołuje zdarzenie close, gdy operacja zamykania zostanie zakończona. Obiekt NativeWindow pozostaje technicznie prawidłowy, ale dostęp do większości właściwości i metod zamkniętego okna generuje błąd IllegalOperationError. Nie można ponownie otworzyć zamkniętego okna. Aby przeprowadzić test, czy okno zostało zamknięte, należy sprawdzić właściwość closed okna. Aby ukryć okno, należy ustawić właściwość NativeWindow.visible na wartość false .

Jeśli właściwość Nativeapplication.autoExit ma wartość true (sytuacja domyślna), wówczas aplikacja zakończy działanie, gdy zamknięte zostanie jej ostatnie okno.

Wszystkie okna posiadane przez inne okna zostają zamknięte w momencie zamknięcia okna głównego. Posiadane okna nie wywołują zdarzenia closing, dlatego nie można zapobiec ich zamknięciu. Zostaje wywołane zdarzenie close.

Zezwalanie na anulowanie operacji okna

Jeśli okno korzysta z karnacji systemowej, interakcja użytkownika z oknem może zostać anulowana przez wykrywanie i anulowanie domyślnego zachowania odpowiednich zdarzeń. Na przykład: jeśli użytkownik kliknie przycisk zamykania karnacji systemowej, wywołane zostanie zdarzenie closing . Jeśli dowolny zarejestrowany detektor wywoła metodę preventDefault() zdarzenia, wówczas okno nie zostanie zamknięte.

Jeśli okno nie korzysta z karnacji systemowej, zdarzenia powiadomień dla zamierzonych zmian nie są automatycznie wywoływane przed dokonaniem zmiany. W skutek tego, jeśli wywołane zostaną metody w celu zamknięcia okna, zmiany jego stanu lub ustawienia dowolnej właściwości obwiedni, zmiany nie można anulować. Aby powiadomić składniki w aplikacji przed zmianą okna, logika aplikacji może wywołać stosowane zdarzenie powiadomienia za pomocą metody dispatchEvent() okna.

Na przykład: poniższa logika implementuje moduł obsługi zdarzenia cancelable dla przycisku zamykania okna:

public function onCloseCommand(event:MouseEvent):void{ 
    var closingEvent:Event = new Event(Event.CLOSING,true,true); 
    dispatchEvent(closing); 
    if(!closingEvent.isDefaultPrevented()){ 
        win.close(); 
    } 
} 

Metoda dispatchEvent() zwraca wartość false , jeśli metoda preventDefault() zdarzenia wywoływana jest przez detektor. Możne jednak zwrócić również wartość false z innych powodów, dlatego lepszym rozwiązaniem jest jawne użycie metody isDefaultPrevented() w celu przetestowania, czy zmianę należy anulować.

Maksymalizowanie, minimalizowanie i przywracanie okna

Aby zmaksymalizować okno, należy użyć metody maximize() klasy NativeWindow.

myWindow.maximize(); 

Aby zminimalizować okno, należy użyć metody minimize() klasy NativeWindow.

myWindow.minimize(); 

Aby przywrócić okno (tj. powrócić do rozmiaru przed minimalizacją lub maksymalizacją), należy użyć metody restore() klasy NativeWindow.

myWindow.restore(); 

Okno, które ma właściciela, jest minimalizowane i przywracane, gdy jest minimalizowane i przywracane okno główne. Podczas minimalizowania posiadane okno nie wywołuje żadnych zdarzeń, ponieważ to okno główne jest minimalizowane.

Uwaga: Zachowanie wynikające z maksymalizacji okna środowiska AIR jest różne od standardowego zachowania w systemie Mac OS X. Zamiast przełączania między „standardowym” rozmiarem zdefiniowanym przez aplikację a rozmiarem ostatnio ustawionym przez użytkownika, okna środowiska AIR przełączają się między rozmiarem ostatnio ustawionym przez aplikację lub użytkownika i pełnym dostępnym obszarem ekranu.

W systemie operacyjnym Linux różne menedżery okien wymuszają różne zasady w zależności od ustawienia stanu wyświetlania okien:

  • W niektórych menedżerach okien okna utility nie mogą być maksymalizowane.

  • Jeśli dla okna zostanie ustawiony maksymalny rozmiar, wówczas niektóre okna nie zezwalają na maksymalizację. Niektóre inne menedżery okien ustawiają stan wyświetlania na zmaksymalizowany, ale nie zmieniają rozmiaru okna. W żadnym z tych przypadków nie jest wywoływane zdarzenie zmiany stanu wyświetlania.

  • Niektóre menedżery okien nie uznają ustawień maximizable ani minimizable okna.

Uwaga: W systemie Linux właściwości okna są zmieniane asynchronicznie. Jeśli autor aplikacji zmieni stan wyświetlania w jednym wierszu programu i odczyta wartość w następnym, odczyt wartości będzie nadal odzwierciedlał stare ustawienie. Na wszystkich platformach obiekt NativeWindow wywołuje zdarzenie displayStateChange po zmianie stanu wyświetlania. Jeśli zachodzi potrzeba wykonania określonego działania na podstawie nowego stanu okna, należy zawsze robić to w podprogramie obsługi zdarzenia displayStateChange . Zobacz Wykrywanie zdarzeń okien .

Przykład: minimalizowanie, maksymalizowanie, przywracanie i zamykanie okna

Poniższa krótka aplikacja MXML przedstawia metody maximize() , minimize() , restore() i close() klasy Window:

<?xml version="1.0" encoding="utf-8"?> 
 
<mx:WindowedApplication  
    xmlns:mx="http://www.adobe.com/2006/mxml"  
    layout="vertical"> 
     
     
    <mx:Script> 
    <![CDATA[ 
    public function minimizeWindow():void 
    { 
        this.stage.nativeWindow.minimize(); 
    } 
 
    public function maximizeWindow():void 
    { 
        this.stage.nativeWindow.maximize(); 
    }           
     
    public function restoreWindow():void 
    { 
        this.stage.nativeWindow.restore(); 
    }           
 
    public function closeWindow():void 
    { 
        this.stage.nativeWindow.close(); 
    } 
    ]]> 
    </mx:Script> 
 
    <mx:VBox> 
        <mx:Button label="Minimize" click="minimizeWindow()"/> 
        <mx:Button label="Restore" click="restoreWindow()"/> 
        <mx:Button label="Maximize" click="maximizeWindow()"/> 
        <mx:Button label="Close" click="closeWindow()"/> 
    </mx:VBox> 
 
</mx:WindowedApplication>

Poniższy przykład kodu ActionScript dla treści Flash tworzy cztery pola tekstowe, które można kliknąć i które wywołują metody minimize() , maximize() , restore() i close() klasy NativeWindow:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 
     
    public class MinimizeExample extends Sprite 
    { 
        public function MinimizeExample():void  
        { 
            var minTextBtn:TextField = new TextField(); 
            minTextBtn.x = 10; 
            minTextBtn.y = 10; 
            minTextBtn.text = "Minimize"; 
            minTextBtn.background = true; 
            minTextBtn.border = true; 
            minTextBtn.selectable = false; 
            addChild(minTextBtn); 
            minTextBtn.addEventListener(MouseEvent.CLICK, onMinimize); 
         
            var maxTextBtn:TextField = new TextField(); 
            maxTextBtn.x = 120; 
            maxTextBtn.y = 10; 
            maxTextBtn.text = "Maximize"; 
            maxTextBtn.background = true; 
            maxTextBtn.border = true; 
            maxTextBtn.selectable = false; 
            addChild(maxTextBtn); 
            maxTextBtn.addEventListener(MouseEvent.CLICK, onMaximize); 
         
            var restoreTextBtn:TextField = new TextField(); 
            restoreTextBtn.x = 230; 
            restoreTextBtn.y = 10; 
            restoreTextBtn.text = "Restore"; 
            restoreTextBtn.background = true; 
            restoreTextBtn.border = true; 
            restoreTextBtn.selectable = false; 
            addChild(restoreTextBtn); 
            restoreTextBtn.addEventListener(MouseEvent.CLICK, onRestore); 
             
            var closeTextBtn:TextField = new TextField(); 
            closeTextBtn.x = 340; 
            closeTextBtn.y = 10; 
            closeTextBtn.text = "Close Window"; 
            closeTextBtn.background = true; 
            closeTextBtn.border = true; 
            closeTextBtn.selectable = false; 
            addChild(closeTextBtn); 
            closeTextBtn.addEventListener(MouseEvent.CLICK, onCloseWindow); 
        } 
        function onMinimize(event:MouseEvent):void 
        { 
            this.stage.nativeWindow.minimize(); 
        } 
        function onMaximize(event:MouseEvent):void 
        { 
            this.stage.nativeWindow.maximize(); 
        } 
        function onRestore(event:MouseEvent):void 
        { 
            this.stage.nativeWindow.restore(); 
        } 
        function onCloseWindow(event:MouseEvent):void 
        { 
            this.stage.nativeWindow.close(); 
        } 
    } 
}

Zmiana rozmiaru i przesuwanie okna

Jeśli okno korzysta z karnacji systemowej, karnacja dostarcza elementów sterowania przeciąganiem do zmiany rozmiaru okna i przesuwania po pulpicie. Jeśli okno nie korzysta z karnacji systemowej, należy dodać własne elementy sterowania, aby zezwolić użytkownikowi na zmianę rozmiaru i przesuwanie okna.

Uwaga: Aby zmienić rozmiar lub przesunąć okno, należy najpierw uzyskać odwołanie do instancji NativeWindow. Informacje na temat tego, w jaki sposób uzyskać odwołanie okna, zawiera sekcja Pobieranie wystąpienia klasy NativeWindow .

Zmiana rozmiaru okna

Aby umożliwić użytkownikowi interaktywne zmienianie rozmiaru okna, należy użyć metody startResize() obiektu NativeWindow. Jeśli metoda zostanie wywołana ze zdarzenia mouseDown , operacja zmiany rozmiaru będzie sterowana przez mysz i zakończy się w momencie odebrania przez system operacyjny zdarzenia mouseUp . W momencie wywołania metody startResize() należy przekazać argument, który określa krawędź lub róg, z którego dokonywana będzie zmiana rozmiaru okna.

Aby programowo ustawić rozmiar okna, należy ustawić właściwości width , height lub bounds okna na żądane wymiary. Podczas ustawiania obwiedni rozmiar i położenie okna mogą być zmieniane w tym samym czasie. Jednak kolejność występowania zmian nie jest zagwarantowana. Niektóre menedżery okien systemu Linux nie zezwalają, aby okna wykraczały poza granice pulpitu (ekranu). W tych przypadkach końcowy rozmiar okna może być ograniczony z powodu kolejności w jakiej są ustawiane właściwości, mimo że łącznie wszystkie zmiany „netto” doprowadziłyby do uzyskania poprawnego okna. Na przykład, jeśli zostanie zmieniona wysokość i położenie y okna u dołu ekranu, wówczas zmiana wysokości na pełną może nie nastąpić, jeśli zmiana wysokości zostanie zastosowana przez zmianą położenia y.

Uwaga: W systemie Linux właściwości okna są zmieniane asynchronicznie. Jeśli autor aplikacji zmieni wielkość okna w jednym wierszu programu i odczyta wymiary w następnym, odczyt wartości będzie nadal odzwierciedlał stare ustawienie. Na wszystkich platformach obiekt NativeWindow wywołuje zdarzenie resize po zmianie wymiarów okna. Jeśli konieczne jest podjęcie określonego działania, np. rozmieszczenie elementów sterujących w oknie, na podstawie nowej wielkości lub stanu okna, należy zawsze robić to w podprogramie obsługi zdarzenia resize . Zobacz Wykrywanie zdarzeń okien .

Tryb skalowania stołu montażowego określa sposób zachowania stołu montażowego okna i jego treści w chwili zmiany rozmiaru okna. Należy pamiętać, że tryby skalowania stołu montażowego zostały zaprojektowane do obsługi sytuacji (np. w przeglądarkach internetowych), w których aplikacja nie steruje rozmiarem lub proporcją jej obszaru wyświetlania. Na ogół najlepsze wyniki uzyskiwane są przez ustawienie właściwości scaleMode stołu montażowego na wartość StageScaleMode.NO_SCALE . Jeśli zajdzie konieczność przeskalowania treści okna, można ustawić parametry treści scaleX i scaleY w odpowiedzi na zmiany obwiedni okna.

Przesuwanie okna

Aby przesunąć okno, nie zmieniając jego rozmiaru, należy użyć metody startMove() klasy NativeWindow. Podobnie jak w przypadku metody startResize() , w razie wywołania metody startMove() ze zdarzenia mouseDown proces przesuwania jest sterowany myszą i jest kończony w momencie wykrycia zdarzenia mouseUp przez system operacyjny.

Więcej informacji o metodach startResize() i startMove() zawiera Skorowidz języka ActionScript 3.0 dla platformy Adobe Flash .

Aby programowo przesunąć okno, należy nadać odpowiednie wartości jego właściwościom x , y lub bounds . Podczas ustawiania obwiedni rozmiar i położenie okna mogą być zmieniane w tym samym czasie.

Uwaga: W systemie Linux właściwości okna są zmieniane asynchronicznie. Jeśli autor aplikacji przeniesie okno w jednym wierszu programu i odczyta położenie w kolejnym, odczyt wartości będzie nadal odzwierciedlał stare ustawienie. Na wszystkich platformach obiekt NativeWindow wywołuje zdarzenie move po zmianie pozycji. Jeśli zachodzi potrzeba wykonania określonego działania na podstawie nowej pozycji okna, należy zawsze robić to w podprogramie obsługi zdarzenia move . Patrz Wykrywanie zdarzeń okien .

Przykład: Zmienianie rozmiarów i przesuwanie okien

Poniższy przykład przedstawia sposób, w jaki inicjowane są operacje zmiany rozmiaru i przesuwania dla okna:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
    import flash.display.NativeWindowResize; 
 
    public class NativeWindowResizeExample extends Sprite 
    { 
        public function NativeWindowResizeExample():void 
        { 
            // Fills a background area. 
            this.graphics.beginFill(0xFFFFFF); 
            this.graphics.drawRect(0, 0, 400, 300); 
            this.graphics.endFill(); 
     
            // Creates a square area where a mouse down will start the resize. 
            var resizeHandle:Sprite =  
                createSprite(0xCCCCCC, 20, this.width - 20, this.height - 20); 
            resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartResize); 
     
            // Creates a square area where a mouse down will start the move. 
            var moveHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, 0); 
            moveHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartMove); 
        } 
     
        public function createSprite(color:int, size:int, x:int, y:int):Sprite 
        { 
            var s:Sprite = new Sprite(); 
            s.graphics.beginFill(color); 
            s.graphics.drawRect(0, 0, size, size); 
            s.graphics.endFill(); 
            s.x = x; 
            s.y = y; 
            this.addChild(s);     
            return s;         
        } 
     
        public function onStartResize(event:MouseEvent):void 
        { 
            this.stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT); 
        } 
 
        public function onStartMove(event:MouseEvent):void 
        { 
            this.stage.nativeWindow.startMove(); 
        } 
    } 
}