Adobe Air ve System Tray

Tarih: Mart 29th, 2009 | Yazar: | Kategori: Action Script | Etiketler: , , , , , , , | 1 Yorum »

Herkese merhaba. Bugün oldukça güzel bir konu hakkında bilgileneceğiz. Mâlum artık Air programları oldukça moda. Fakat pencereler gibi önemli konularda sorunlar çekenler var. Daha önceden pencerelerin nasıl kullanılacağına dair bir yazı yazmıştım fakat System Tray hakkında bir bilgi vermemiştim. Çünkü system tray malesef Air in kendi fonksiyonu değil. Bizim baştan bir fonksiyon yazmamız gerekiyor…

Öncelikle bilmeyenler için System Tray nedir? sorusuna cevap verelim. Şimdi arkadaşlar şu sol altta yazan saati görüyor musunuz? İşte onun yanında bulunan ufak iconlara system tray yani sistem tepsisi diyoruz. Programlar kullanıcıları rahatsız etmeden, kendi halinde çalışmaya devam etmek için system tray moduna geçerler. Bu sayede görev çubuğunda fazladan yer sarf etmemiş olur. Tabi ki kullanıcı da bu durumdan kârlı çıkar…

Lafı uzatmadan önce kodlarımızı verelim;

var simgeWin:String = "AppIconsForAIRPublish/AIRApp_16.png";
var simgeMac:String = "AppIconsForAIRPublish/AIRApp_128.png";
var trayMenu:NativeMenu = new NativeMenu();
var simgeYukleyici:Loader = new Loader();
var gosterTrayButonu:NativeMenuItem = trayMenu.addItem(new NativeMenuItem("Göster"));
var kapatTrayButonu:NativeMenuItem = trayMenu.addItem(new NativeMenuItem("Kapat"));
stage.nativeWindow.addEventListener(Event.CLOSING, pencereKapamaFonk);
function pencereKapamaFonk(evt:Event):void {
evt.preventDefault();
stage.nativeWindow.visible=false;
trayaAt();
}
function trayaAt() {
if (NativeApplication.supportsSystemTrayIcon) {
NativeApplication.nativeApplication.autoExit = false;
simgeYukleyici.contentLoaderInfo.addEventListener(Event.COMPLETE, simgeYuklendi);
simgeYukleyici.load(new URLRequest(simgeWin));
var traySimge:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
traySimge.menu = trayMenu;
}
if (NativeApplication.supportsDockIcon) {
simgeYukleyici.contentLoaderInfo.addEventListener(Event.COMPLETE,simgeYuklendi);
simgeYukleyici.load(new URLRequest(simgeMac));
var macDock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;
macDock.menu = trayMenu;
}
function simgeYuklendi(event:Event):void {
NativeApplication.nativeApplication.icon.bitmaps = [event.target.content.bitmapData];
}
}
gosterTrayButonu.addEventListener(Event.SELECT, btnGoster);
kapatTrayButonu.addEventListener(Event.SELECT, btnKapat);
function btnGoster(event:Event) {
stage.nativeWindow.activate();
stage.nativeWindow.visible=true;
}
function btnKapat(event:Event) {
NativeApplication.nativeApplication.icon.bitmaps = [];
NativeApplication.nativeApplication.exit();
}

Evet şimdi açıklayalım. Arkadaşlar önce Windows ve Mac için ayrı ayrı simge tanımlıyoruz. Bunun nedeni Windows un 16×16, Mac in 128×128 boyutunda icon kullanması. İşte bu iconların tamamı bizim programımızın kurulum dizininde bulunduğundan direkt olarak adresi veriyoruz. Sonra bir nativeMenu tanımlıyoruz. Native Menüler Air ile gelen bir özellik. Programlarda bulunan menülerin sistem tarafında tanımlanmasını sağlıyor. Bu sayede işletim sistemi tarafından yaratılıyor. İşte böyle bir menü yaratmak için nativeMenu tanmılıyoruz. Son olarak simgeleri klasörden yüklemek için bir yükleyici tanımlıyoruz…

Yükleyiciden sonra nativeMenu müze elemanlar ekliyoruz. Göster ve Kapat olmak üzere iki tane ekledim gördüğünüz gibi. İşte elemanlar ve değişkenleri tanımladıktan sonra asıl kısma geliyoruz…

Programa bir dinleyici ekliyoruz. Bu dinleyicinin olayı ise CLOSİNG yani Kapatılırken yani Şimdiki zamanda. Program kapatıldığı anda pencereKapamaFonk isimli fonksiyon devreye giriyor. Bu sayede programın kapatılması iptal edilip, görünümü false yani kapatılıyor. Kısaca özetlemek gerekirse program kapatıldığı anda işlem iptal edilip sadece görüntü yok ediliyor. Fakat arkaplanda çalışmaya devam ediyor. İşte pencereKapamaFonk isimli fonksiyonun içinde sadece bunlar var.

Programın kapatılışı iptal edilip, görünümü de saklandığı anda ise trayaAt isimli fonksiyon çağrılıyor. Burada ise bazı sorgulamalar var. Diyor ki eğer mevcut işletim sisteminde system tray varsa simgeWin i yükle. Ve bu iconu programın sistem traydaki iconu yap. Ayrıca programın menüsüde trayMenu olsun. Bir diğer sorguda eğer dock yani Mac gibi bir tray olayı varsa simgeMac yükle ve dock iconu olarak ata…

Tüm bu sorgulardan geçtikten ve bir çeşit karar alındıktan sonra simge yükleniyor ve simgeYuklendi isimli fonksiyon başlatılıyor. Burada ise olay çok basit. Programın iconunu bitmap biçimde; yüklenen ve işleyen eventlerdeki icon yapıyoruz. Yani programın iconunu yüklenen icon yapıyoruz…

Evet buraya kadar tray ile olan herşey bitti. Bundan sonra programın tekrar normal hale dönmesi ve nativeMenu deki elemanlara hani görevlerin verileceği ayarlanıyor. Eğer ki göster e tıklanırsa programın visible si aktif oluyor ve görünüyor. Eğer kapat derse programa son veriliyor…

Şimdilik dersimiz bu kadar. Eğer sorunuz olursa cevaplarım.. Hmm birde unutmadan bu kodları Raistlin nickli arkadaşımızın sınıfından normal hale çevirdim daha iyi anlayın diye…

Herkese iyi günler, iyi çalışmalar…




Benzer Yazılar;

coded by nessus

“Adobe Air ve System Tray” yazısında 1 Ahkam var.

  1. 1 Serdar 09:49 on Eylül 24th, 2010 anında kesmiş:

    Flash Develop ta derlediğim zaman NativeMenu diye bir class ı göremiyor. Nasıl çözebilirim ?


Ahkam Kesme Aparatı

  • *