Bu bölümde AIR uygulamaları geliştirirken yeni sistem pencereleri ile çalışırken neler yapılması gerektiğine değineceğim. Bu uygulamaya başlayabilmek için bir önceki yazıda bulunan örneğe ihtiyacınız olacak. İlk olarak NativeApplication isimli dosyayı açın ve Save As komutu ile farklı bir isimle kaydedin. Dosyayı kaydettikten sonra Components panelindeki User Interface sekmesinin altında bulunan Button bileşenini tutup sahneye sürükleyin. Bileşeni sahneye ekledikten sonra sahne üzerinden silin.
Pencereler ile ilgili gerekli ayarları yapabilmek için NativeWindowInitOptions sınıfının kullanılması gerekmektedir. Bu sınıfı kullanabilmek içinse yeni bir NativeWindow nesnesi tanımlamak gerekir. Tanımlanan NativeWindow nesnesini tanımlarken NativeWindowInitOptions nesnesini parametre olarak geçmek gerekir. Artık kodları yazmaya başlayabiliriz. Actions panelini açın ve aşağıdaki kod bloğunu panelde en üstte bulunan kısmın altına ekleyin. Button sınıfı ile Library’de bulunan Button bileşeni ile ilgili işlemleri gerçekleştireceğiz.
import fl.controls.Button;
Şimdi de yeni bir sistem penceresi oluşturabilmek ve bu pencere ile ilgili ayarlamaları yapabilmek için iki değişken tanımlayacağız. yeniPencere isimli değişken açılacak olan pencereyi temsil edecek. winOptions nesnesi ile de açılacak olan pencerenin ayarlarını yapacağız. yeniPencere_btn isimli nesne ile de pencerenin açılmasını sağlayacağız. Aşağıdaki kod bloğunu
satırının altına ekleyin.
var yeniPencere:NativeWindow;
var yeniPencere_btn:Button=new Button();
anaPencere.stage.addChild(yeniPencere_btn);
yeniPencere_btn.label = "Yeni Pencere Aç";
Sahne üzerindeki butona tıklandığında sürekli olarak yeni bir pencere oluşturulacaktır. Bunu önleyebilmek için Boolean veri türünde bir değişken tanımlayacağız. Eğer değişkenin değeri false ise yeni pencere açılacak, true ise herhangi bir işlem yapılmayacaktır. Tanımlayacağımız değişkenin ismi yeniPencereAcik olsun. Aşağıdaki kod bloğunu
satırının altına ekleyin.
Kullanılacak pencereyi oluşturmak ve pencere ile ilgili ayarları yapabilmek için bir fonksiyon tanımlayacağız. Tanımlayacağımız bu fonksiyona iki adet parametre göndereceğiz. Bu parametrelerden w parametresi ile pencerenin genişilik değerini, h ile de pencerenin yükseklik değerini belirleyeceğiz. Fonksiyon içerisinde ise ilk olarak tanımladığımız NativeWindowInitOptions nesnesinin özelliklerini belirleyeceğiz. Açılacak olan pencere minimize-maksimize edilemeyecek ve büyütülemeyecektir(resizable). Pencerenin kullanacağı krom tipini ise systemChrome özelliği ile belirleyeceğiz. Bu özelliğin değeri NONE ise sistem kromu kullanılmayacaktır. Sistem kromlarını kullanabilmek için bu özelliğin değerini STANDART olarak değiştirmeniz veya bu satırı iptal etmeniz gerekecektir. Pencere şeffaflığı ile ilgili işlemleri de transparent özelliğini kullanarak yapacağız.
Bu ayarları yaptıktan sonra daha once tanımlamış olduğumuz NativeWindow nesnesinin bir kopyasını oluşturacağız ve parametre olarak winOptions nesnesini göndereceğiz. Kopyayı oluşturduktan sonra ise pencerenin genişlik ve yükseklik değerlerini belirleyip pencerenin ölçekleme ve hizalama özelliklerini düzenleyeceğiz. Bu işlemleri yapabilmek için NativeWindow nesnesinin daha once tanımlanmış olması gerekmektedir. Açılacak pencere ile ilgili son olarak title özelliğini düzenleyeceğiz.
Pencere ile ilgili genel ayarları bitirdikten sonra ise DragBar ve CloseButton nesnelerinin birer kopyasını açılan pencereye ekleyeceğiz. Gerekli işlemlerin (sürükleme ve pencereyi kapatma) yapılabilmesi için bu nesnelere birer oaly dinleyici ekleyeceğiz. Fonksiyon içerisinde son olarak pencerenin görüntülenebilmesi gerekli satırı ekleyeceğiz. Bu işlemi de activate() metodunu kullanarak yapacağız. Aşağıdaki kodları Actions panelinin en altına yerleştirebilirsiniz.
{
winOptions.maximizable = false;
winOptions.minimizable = false;
winOptions.resizable = false;
winOptions.systemChrome = NativeWindowSystemChrome.NONE;
winOptions.transparent = false;
yeniPencere = new NativeWindow(winOptions);
yeniPencere.width = w;
yeniPencere.height = h;
yeniPencere.stage.scaleMode = StageScaleMode.NO_SCALE;
yeniPencere.stage.align = StageAlign.TOP_LEFT;
yeniPencere.title = "Yeni Pencere";
var yeniPencereDragBar_mc:DragBar=new DragBar();
var yeniPencereClose_mc:CloseButton = new CloseButton();
yeniPencere.stage.addChild(yeniPencereDragBar_mc);
yeniPencere.stage.addChild(yeniPencereClose_mc);
yeniPencereClose_mc.buttonMode = true;
yeniPencereClose_mc.x = yeniPencere.width - 20;
yeniPencereDragBar_mc.width = w;
yeniPencereDragBar_mc.x = 0;
yeniPencereDragBar_mc.addEventListener(MouseEvent.MOUSE_DOWN, pencereSurukle);
yeniPencereClose_mc.addEventListener(MouseEvent.CLICK, pencereyiKapa);
yeniPencere.activate();
}
Şimdi de sırası ile sahne üzerinde bulunan butona biro lay dinleyici ekleyeceğiz ve yeniPencereAc fonksiyonu içerisinde eklediğimiz olay dinleyicilerin fonksiyonlarını oluşturacağız. Butona tıklandığında çalışacak olan fonksiyonun içerisinde ilk once yeniPencereAcik değişkeninin değerini kontrol edeceğiz. Eğer değişkenin değeri false ise değişkenin değerini true olarak değiştirecek ve yeniPencereAc isimli fonksiyonu çağıracağız. pencereSurukle fonksiyonun içerisinde ise startMove() metodunu kullanarak açılan pencerenin sürüklenmesini sağlayacağız. pencereyiKapa fonksiyonun içerisinde ise açık olan pencereyi kapatacak ve yeniPencereAcik isimli değişkenin değerini false olarak değiştireceğiz. Aşağıdaki kodları yine Actions panelinin en altına yerleştirebilirsiniz.
function pencereAc(e:MouseEvent)
{
if (! yeniPencereAcik)
{
yeniPencereAcik = true;
yeniPencereAc(250,250);
}
}
function pencereSurukle(e:MouseEvent)
{
yeniPencere.startMove();
}
function pencereyiKapa(e:MouseEvent)
{
yeniPencere.close();
yeniPencereAcik = false;
}
Kodların tamamının görünümü aşağıdaki gibidir.
import flash.display.NativeWindow;
import flash.system.Capabilities;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.NativeWindowInitOptions;
import fl.controls.Button;
var anaUygulama:NativeApplication = NativeApplication.nativeApplication;
var anaPencere:NativeWindow = stage.nativeWindow;
anaPencere.title = "First Application";
var winOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var yeniPencere:NativeWindow;
var yeniPencere_btn:Button=new Button();
anaPencere.stage.addChild(yeniPencere_btn);
yeniPencere_btn.label = "Yeni Pencere Aç";
var dragBar_mc:DragBar = new DragBar();
var minimize_mc:MinimizeButton=new MinimizeButton();
var maksimize_mc:MaksimizeButton=new MaksimizeButton();
var close_mc:CloseButton=new CloseButton();
anaPencere.stage.addChild(dragBar_mc);
anaPencere.stage.addChild(minimize_mc);
anaPencere.stage.addChild(maksimize_mc);
anaPencere.stage.addChild(close_mc);
minimize_mc.buttonMode = true;
maksimize_mc.buttonMode = true;
close_mc.buttonMode = true;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var maksimize:Boolean;
var yeniPencereAcik:Boolean;
anaPencere.addEventListener(Event.RESIZE, resized);
function resized(e:Event)
{
dragBar_mc.x = dragBar_mc.y = 0;
dragBar_mc.width = anaPencere.width;
minimize_mc.x = anaPencere.width - 70;
minimize_mc.y = 0;
maksimize_mc.x = anaPencere.width - 45;
maksimize_mc.y = 0;
close_mc.x = anaPencere.width - 20;
close_mc.y = 0;
yeniPencere_btn.x=(anaPencere.width-yeniPencere_btn.width)/2;
yeniPencere_btn.y=(anaPencere.height-yeniPencere_btn.height)/2;
anaPencere.x =(Capabilities.screenResolutionX-anaPencere.width)/2;
anaPencere.y=(Capabilities.screenResolutionY-anaPencere.height)/2;
}
anaPencere.dispatchEvent(new Event(Event.RESIZE));
dragBar_mc.addEventListener(MouseEvent.MOUSE_DOWN, pencereyiSurukle);
function pencereyiSurukle(e:MouseEvent)
{
anaPencere.startMove();
}
minimize_mc.addEventListener(MouseEvent.CLICK, minimizeEt);
function minimizeEt(e:MouseEvent)
{
anaPencere.minimize();
}
maksimize_mc.addEventListener(MouseEvent.CLICK, maksimizeEt);
function maksimizeEt(e:MouseEvent)
{
if (! maksimize)
{
anaPencere.maximize();
maksimize = true;
}
else if (maksimize)
{
anaPencere.width = 625;
anaPencere.height = 400;
maksimize = false;
}
}
close_mc.addEventListener(MouseEvent.CLICK, uygulamayiKapat);
function uygulamayiKapat(e:MouseEvent)
{
anaUygulama.exit();
}
function yeniPencereAc(w:int, h:int)
{
winOptions.maximizable = false;
winOptions.minimizable = false;
winOptions.resizable = false;
winOptions.systemChrome = NativeWindowSystemChrome.NONE;
winOptions.transparent = false;
yeniPencere = new NativeWindow(winOptions);
yeniPencere.width = w;
yeniPencere.height = h;
yeniPencere.stage.scaleMode = StageScaleMode.NO_SCALE;
yeniPencere.stage.align = StageAlign.TOP_LEFT;
yeniPencere.title = "Yeni Pencere";
var yeniPencereDragBar_mc:DragBar=new DragBar();
var yeniPencereClose_mc:CloseButton = new CloseButton();
yeniPencere.stage.addChild(yeniPencereDragBar_mc);
yeniPencere.stage.addChild(yeniPencereClose_mc);
yeniPencereClose_mc.buttonMode = true;
yeniPencereClose_mc.x = yeniPencere.width - 20;
yeniPencereDragBar_mc.width = w;
yeniPencereDragBar_mc.x = 0;
yeniPencereDragBar_mc.addEventListener(MouseEvent.MOUSE_DOWN, pencereSurukle);
yeniPencereClose_mc.addEventListener(MouseEvent.CLICK, pencereyiKapa);
yeniPencere.activate();
}
yeniPencere_btn.addEventListener(MouseEvent.CLICK, pencereAc);
function pencereAc(e:MouseEvent)
{
if (! yeniPencereAcik)
{
yeniPencereAcik = true;
yeniPencereAc(250,250);
}
}
function pencereSurukle(e:MouseEvent)
{
yeniPencere.startMove();
}
function pencereyiKapa(e:MouseEvent)
{
yeniPencere.close();
yeniPencereAcik = false;
}


#1 by cooli on 24 Ocak 2011 - 16:05
merhaba:)
Çook teşekkürler……
uygulamanın fla versiyonunun yapılabilmesi mümkünmüdür acaba?
geliştirmeleriniz için sağolun.
#2 by Erol Demirer on 27 Ocak 2011 - 16:25
Uygulamanın kaynak dosyası zaten .fla’dır. Web uygulamalarını kastediyorsanız web uygulamalarında böyle bir işlem yapma şansınız yok.
#3 by metin54 on 06 Şubat 2011 - 22:11
hiç bir dosyanızı açamıyorum versiyon farkı var..
#4 by Erol Demirer on 07 Şubat 2011 - 09:55
Adobe Flash Professional CS5 sürümünü kullanırsan, sorun ortadan kalkacaktır.
#5 by taros84 on 16 Eylül 2011 - 15:37
NativeApplication. nativeApplication.autoExit =
olayıda var onuda eklersen daha iyi olur neden dersen programda saat kenarı icon oluşturulursa işe yarıyacaktır cünkü şuvar acılan pencerelerin hepsi kapandığında programı otomatik kapatır yanlız true olmalıdır
NativeApplication. nativeApplication.autoExit = true; gibi kolay gelsin
#6 by taros84 on 16 Eylül 2011 - 15:52
aklıma gelmişken birde orderToFront(); kullanımı var ben kendim kullandığım AIR çalışmalarımda yer veriyorum acılan pencereyi visible olarak gizlemek isteyenler olursa visible true olarak tanımlandığında pencere altta kalır bu işlemi
orderToFront(); kullanarak aşabiliriz ve pencereyi öne cıkarmasını sağlamış oluruz