Pencereleri yönetmeAdobe AIR 1.0 ve üstü Masaüstü pencerelerinin görünümünü, davranışını ve yaşam döngüsünü yönetmek için NativeWindow sınıfının özelliklerini ve yöntemlerini kullanırsınız. Not: Flex çerçevesini kullanırken, pencere davranışını çerçeve sınıflarını kullanarak yönetmek genellikle daha iyidir. NativeWindow özelliklerinin ve yöntemlerinin çoğuna mx:WindowedApplication ve mx:Window sınıfları üzerinden erişilebilir.
Bir NativeWindow örneği almaBir pencereyi değiştirmek için önce pencere örneğini almalısınız. Pencere örneğini aşağıdaki konumlardan birinden alabilirsiniz:
Flex mx:WindowedApplication ve mx:Window nesneleri görüntüleme nesnesi olduğundan, stage özelliğini aşağıdaki şekilde kullanıp bir MXML dosyasında uygulama penceresine kolayca başvuru yapabilirsiniz: <?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 Not: WindowedApplication veya Window bileşeni Flex çerçevesi tarafından pencere sahnesine eklenene kadar, stage özelliği null değerindedir. Bu davranış Flex Application bileşeninin davranışıyla tutarlıdır, ancak WindowedApplication ve Window bileşenlerinin başlatma döngüsünde önceden gerçekleşen creationComplete gibi olaylara ilişkin dinleyicilerde sahneye veya NativeWindow örneğine erişmenin olanaksız olduğu anlamına gelir. applicationComplete olayı gönderildiğinde sahneye ve NativeWindow örneğine erişmek güvenlidir.
Pencereleri etkinleştirme, gösterme ve gizlemeBir pencereyi etkinleştirmek için NativeWindow activate() yöntemini çağırın. Bir pencerenin etkinleştirilmesi pencereyi öne çıkarır, ona klavye ve fare odağı kazandırır ve gerektiğinde pencereyi yeniden yükleyerek veya visible özelliğini true olarak ayarlayarak pencereyi görünür duruma getirir. Bir pencereni etkinleştirilmesi uygulamadaki diğer pencerelerin sırasını değiştirmez. Activate() yönteminin çağrılması, pencerenin activate olayı göndermesine neden olur. Bir pencereyi etkinleştirmeden göstermek için visible özelliğini true olarak ayarlayın. Bu, pencereyi öne çıkarır, ancak odağı pencereye atamaz. Bir pencereyi görünümden gizlemek için, visible özelliğini false olarak ayarlayın. Pencerenin gizlenmesi pencerenin ve tüm ilişkili görev çubuğu simgelerinin ve Mac OS X'te Pencereler menüsündeki girişin görüntülenmesini engeller. Bir pencerenin görünürlüğünü değiştirdiğinizde, bu pencerenin sahip olduğu diğer pencerelerin görünürlüğü de değişir. Örneğin, bir pencereyi gizlerseniz, sahip olduğu tüm pencereler de gizlenir. Not: Mac OS X'te dock pencere bölümünde bir simgeye sahip olan simge durumuna küçültülmüş bir pencereyi tam olarak gizlemek olanaksızdır. Simge durumuna küçültülen bir pencerede visible özelliği false olarak ayarlandıysa, pencereye ilişkin dock simgesi görüntülenmeye devam eder. Kullanıcı simgeyi tıklattığında, pencere görünür bir duruma yeniden yüklenir ve görüntülenir.
Pencere görüntü sırasını değiştirmeAIR, pencerelerin görüntü sırasını doğrudan değiştirmek için birkaç yöntem sağlar. Bir pencereyi görüntü sırasının önüne veya arkasına, bir pencereyi başka bir pencerenin üzerine veya ardına taşıyabilirsiniz. Aynı zamanda, kullanıcı pencereleri etkinleştirerek yeniden sıralayabilir. Bir pencerenin alwaysInFront özelliğini true olarak ayarlayarak, bu pencereyi diğer pencerelerin önünde tutabilirsiniz. Birden çok pencere bu ayara sahip olduğunda, bu pencerelerin görüntü sırası kendi aralarında belirlenir, ancak bu pencereler her zaman alwaysInFront özelliği false olarak ayarlanmış pencerelerin önünde sıralanır. AIR uygulaması etkin olmadığında bile, en üst grupta yer alan pencereler diğer uygulamalardaki pencerelerin üzerinde görüntülenir. Bu davranış kullanıcı için zorlayıcı olabileceğinden, alwaysInFront özelliği yalnızca gerekli ve uygun olduğunda true olarak ayarlanmalıdır. Uygun kullanım örnekleri şunları içerir:
Not: AIR, alwaysInFront özelliğinin uygun kullanımını zorlamaz. Ancak, uygulamanız bir kullanıcının iş akışını aksatıyorsa, uygulamanın kullanıcının çöp kutusuna gönderilme ihtimali de yüksektir.
Bir pencere başka pencerelere sahipse, sahip olduğu pencereler onun önünde sıralanır. orderToFront() öğesini çağırır veya başka pencereleri olan bir pencerede alwaysInFront öğesini true olarak ayarlarsanız, sahip olunan pencereler sahip pencereyle birlikte diğer pencerelerin önünde tekrar sıralanır ancak sahip olunan pencereler hala sahip pencerenin önünde görüntülenir. Sahip olunan pencerelerde sıralama yöntemlerini çağırmak aynı pencere tarafından sahip olunan pencereler arasında normal bir şekilde çalışır, ancak grubun dışında pencerelerle karşılaştırıldığında sahip olunan pencere grubunun tümünün sırasını değiştirebilir. Örneğin, sahip olunan bir pencerede orderToFront() öğesini çağırırsanız hem o pencere, hem sahibi hem de aynı sahibe ait olan diğer pencereler pencere görüntüleme sırasının önüne getirilir. NativeWindow sınıfı, bir pencerenin diğer pencerelere göre görüntü sırasını ayarlamak için aşağıdaki özellikleri ve yöntemleri sağlar:
Not: Bir pencere gizli (visible özelliği false) veya simge durumundaysa, görüntü sırası yöntemlerinin etkisi olmaz.
Linux işletim sisteminde, farklı pencere yöneticileri pencere görüntü sırasına ilişkin farklı kurallar uygular:
Bir pencereyi kapatmaBir pencereyi kapatmak için NativeWindow.close() yöntemini kullanın. Bir pencerenin kapatılması pencere içeriğini boşaltır, ancak diğer nesneler bu içeriğe başvuruyorsa, içerik nesneleri ortadan kaldırılmaz. NativeWindow.close() yöntemi senkronize olmayan biçimde yürütülür, pencerede bulunan uygulama kapatma işlemi sırasında çalışmaya devam eder. Close yöntemi, kapatma işlemi başarılı olduğunda bile bir close olayı gönderir. NativeWindow nesnesi teknik olarak hala geçerlidir, ancak çoğu özellik ve yönteme kapatılmış bir pencerede erişmek, bir IllegalOperationError oluşturur. Kapatılan bir pencereyi yeniden açamazsınız. Pencerenin kapanıp kapanmadığını test etmek için pencerenin closed özelliğini kontrol edin. Bir pencereyi görünümden gizlemek için NativeWindow.visible özelliğini false olarak ayarlayın. Nativeapplication.autoExit özelliği varsayılan true değerinde olduğunda, son pencere kapandığında uygulama kapanır. Bir sahibi bulunan tüm pencereler, sahip pencere kapatıldığında kapatılır. Sahip olunan pencereler bir kapanma olayı göndermezler bu nedenle kapatılma olayını engelleyemezler. Bir close olayı gönderilir. Pencere işlemlerinin iptaline izin vermeBir pencere sistem kromu kullandığında, uygun olayların varsayılan davranışı dinlenerek veya iptal edilerek kullanıcının pencereyle etkileşimi iptal edilebilir. Örneğin, bir kullanıcı sistem kromu kapatma düğmesini tıklattığında, closing olayı gönderilir. Bir kayıtlı dinleyici olayın preventDefault() yöntemini çağırdığında, pencere kapanmaz. Pencere sistem kromu kullanmıyorsa, hedeflenen değişikliklerin bildirim olayları değişiklik yapılmadan önce otomatik olarak gönderilmez. Bu nedenle, bir pencereyi kapatmaya, pencere durumunu değiştirmeye veya pencere sınırı özelliklerinden birini ayarlamaya ilişkin yöntemleri çağırırsanız, değişiklik iptal edilemez. Pencere değişikliği yapılmadan uygulamanızdaki bileşenleri bilgilendirmek için, uygulama mantığınız pencerenin dispatchEvent() yöntemini kullanarak ilgili bildirim olayını gönderebilir. Örneğin, aşağıdaki mantık bir pencere kapatma düğmesi için iptal edilebilir bir olay işleyicisi uygular: public function onCloseCommand(event:MouseEvent):void{ var closingEvent:Event = new Event(Event.CLOSING,true,true); dispatchEvent(closing); if(!closingEvent.isDefaultPrevented()){ win.close(); } } Olay preventDefault() yöntemi bir dinleyici tarafından çağrılırsa, dispatchEvent() yöntemi false değerini döndürür. Ancak, bu yöntem başka nedenlerle de false değerini döndürebilir, bu nedenle değişikliğin iptal edilmesi gerekip gerekmediğini test etmek için açıkça isDefaultPrevented() yöntemini kullanmak daha uygundur. Bir pencereyi büyütme, simge durumuna küçültme ve geri yüklemePencereyi büyütmek için NativeWindow maximize() yöntemini kullanın. myWindow.maximize(); Pencereyi simge durumuna küçültmek için NativeWindow minimize() yöntemini kullanın. myWindow.minimize(); Pencereyi geri yüklemek için (yani, simge durumuna küçültülmeden veya büyütülmeden önceki boyutuna geri döndürmek için), NativeWindow restore() yöntemini kullanın. myWindow.restore(); Sahibi olan bir pencere, sahip olan pencere simge durumuna küçültüldüğünde veya geri yüklendiğinde simge durumuna küçültülür ya da geri yüklenir. Sahip olunan pencere simge durumuna küçültüldüğünde sahibi de simge durumuna küçültüldüğünden herhangi bir olay gönderilmez. Not: Bir AIR penceresini büyütme sonucunda ortaya çıkan davranış, Mac OS X standart davranışından farklıdır. Uygulama tarafından tanımlanmış “standart” bir boyut ve kullanıcı tarafından ayarlanan son boyut arasında geçiş yapmak yerine, AIR pencereleri uygulama veya kullanıcı tarafından ayarlanan son boyut ve ekranın tam kullanılabilir alanı arasında geçiş yapar.
Linux işletim sisteminde, farklı pencere yöneticileri pencere görüntü durumunun ayarlanmasına ilişkin farklı kurallar uygular:
Not: Linux'ta pencere özellikleri senkronize olmayan şekilde değişir. Programınızın bir satırındaki görüntüleme durumunu değiştirir ve sonraki satırdaki değeri okursanız, okunan değer hala eski ayarı yansıtacaktır. Tüm platformlarda, NativeWindow nesnesi görüntüleme durumu değiştiğindedisplayStateChange olayını gönderir. Pencerenin yeni durumunu temel alarak bir eylemde bulunmanız gerekirse, bunu her zaman bir displayStateChange olay işleyicisinde yapın. Bkz. Pencere olaylarını dinleme.
Örnek: Bir pencereyi simge durumuna küçültme, büyütme, geri yükleme ve kapatmaAşağıdaki kısa MXML uygulaması Window maximize(), minimize(), restore() ve close() yöntemlerini gösterir: <?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> Flash için aşağıdaki ActionScript örneği, NativeWindow minimize(), maximize(), restore() ve close() yöntemlerini tetikleyen dört tıklatılabilir metin alanı oluşturur: 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(); } } } Bir pencereyi yeniden boyutlandırma ve taşımaBir pencere sistem kromu kullandığında, krom, pencerenin yeniden boyutlandırılması ve masaüstünde taşınması için sürükleme denetimleri sağlar. Pencere sistem kromu kullanmıyorsa, kullanıcının pencereyi yeniden boyutlandırması ve taşımasını olanaklı kılmak için kendi denetimlerinizi eklemelisiniz. Not: Bir pencereyi yeniden boyutlandırmak veya taşımak için, önce NativeWindow örneğine bir başvuru almalısınız. Bir pencere başvurusunun nasıl alınacağı hakkında bilgi için Bir NativeWindow örneği alma.
Bir pencereyi yeniden boyutlandırmaKullanıcının pencereyi etkileşimli olarak yeniden boyutlandırmasına izin vermek için NativeWindow startResize() yöntemini kullanın. Bu yöntem bir mouseDown olayından çağrıldığında, yeniden boyutlandırma işlemi fareyle başlatılır ve işletim sistemi bir mouseUp olayı aldığında tamamlanır. startResize() yöntemini çağırırken, pencerenin yeniden boyutlandırılacağı ilk kenar ve köşeyi belirten bir argüman iletirsiniz. Pencere boyutunu programlama yoluyla ayarlamak için pencerenin width, height ve bounds özelliklerini istenen boyutlara göre ayarlayın. Sınırları belirledikten sonra, pencere boyutu ve konum aynı anda değiştirilebilir. Ancak, değişikliklerin oluştuğu sıra garanti edilmez. Bazı Linux pencere yöneticileri, pencerelerin masaüstü ekranının sınırları dışına genişlemesine izin vermez. Bu durumlarda, aksi halde değişikliklerin net etkisi kurala uygun bir pencereyle sonuçlanacak olsa da, son pencere boyutu özelliklerin ayarlandığı sıra nedeniyle sınırlanabilir. Örneğin, ekranın altında yer alan pencerenin hem yüksekliğini hem de y konumunu değiştirdiğinizde, yükseklik değişikliği y konumu değişmeden önce uygulandığından tam yükseklik değişikliği gerçekleşmeyebilir. Not: Linux'ta pencere özellikleri senkronize olmayan şekilde değişir. Bir pencereyi programınızın bir satırında yeniden boyutlandırırsanız ve bir sonrakinde boyutları okursanız, eski ayarları yansıtmaya devam edeceklerdir. Tüm platformlarda, NativeWindow nesnesi pencere yeniden boyutlandırıldığında resize olayını gönderir. Penceredeki kontrolleri pencerenin yeni boyutu veya durumuna dayalı olarak düzenlemek gibi bir eylemde bulunmanız gerekirse, bunu her zaman resize olay işleyicisinde yapın. Bkz. Pencere olaylarını dinleme.
Sahnenin ölçekleme modu, pencere sahnesi ve içeriklerinin pencere yeniden boyutlandırıldığında nasıl davranacağını belirler. Sahne ölçekleme modlarının, web tarayıcısında olduğu gibi, uygulamanın görüntü alanının boyutu veya en boy oranının denetiminde olmadığı durumlar için tasarlanmış olduğunu unutmayın. Genellikle scaleMode özelliğini StageScaleMode.NO_SCALE olarak ayarladığınızda en iyi sonuçları alırsınız. Yine de, pencere içeriğinin ölçeklenmesini istiyorsanız, değişen pencere sınırlarına yanıt olarak içeriğin scaleX ve scaleY parametrelerini ayarlayabilirsiniz. Bir pencereyi taşımaBir pencereyi yeniden boyutlandırmadan taşımak için NativeWindow startMove() yöntemini kullanın. startResize() yöntemi gibi, startMove() yöntemi bir mouseDown olayından çağrıldığında, taşıma işlemi fareyle başlatılmıştır ve işletim sistemi bir mouseUp olayı aldığında tamamlanır. startResize() ve startMove() yöntemleriyle ilgili ayrıntılı bilgi için bkz. Adobe Flash Platformu için ActionScript 3.0 Başvurusu. Bir pencereyi programlanabilir bir şekilde taşımak için, pencerenin x, y, veya bounds özelliklerini istenilen konuma ayarlayın. Sınırları belirledikten sonra, pencere boyutu ve konum aynı anda değiştirilebilir. Not: Linux'ta pencere özellikleri senkronize olmayan şekilde değişir. Programınızın bir satırında bir pencere taşırsanız ve sonraki satırdaki değeri okursanız, okunan değer hala eski ayarı yansıtacaktır. Tüm platformlarda, NativeWindow nesnesi konum değiştiğindemove olayını gönderir. Pencerenin yeni konumunu temel alarak bir eylemde bulunmanız gerekirse, bunu her zaman bir move olay işleyicisinde yapın. Bkz. Pencere olaylarını dinleme.
Örnek: Pencereleri yeniden boyutlandırma ve taşımaAşağıdaki örnek bir pencerede yeniden boyutlandırma ve taşıma işlemlerinin nasıl başlatılacağını gösterir: 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(); } } } |
|