AIR Uygulamalarını System Tray veya Dock Menüye Küçültmek


AIR ile uygulama geliştirirken minimize() metodunu kullanarak uygulamayı/pencereleri minimize ettiğimizde görev çubuğuna küçültülür. Eğer bir kaç program/pencere açıksa görev çubuğu üzerinde istenmeyen bir karmaşa olabilir. Bunun yerine kullanıcı uygulamayı minimize etmek istediğinde uygulamayı görev çubuğuna değil de System Tray yani sistem tepsisine küçültülebilir(Win – Linux işletim sistemlerinde Sistem tepsisi, Macintosh işletim sisteminde Dock menüye küçültülür). Fakat bu işlem için gerekli metot AIR içerisinde bulunmamaktadır(Bulunmamasından kastım minimize() veya maksimize() metotları gibi bir metodun olmayışıdır). Uygulamayı sistem tepsisi/dock menü’ye küçültebilmek için ikonlara ihtiyaç vardır. Windows-Linux işletim sistemlerinde 16×16, Macintosh işletim sisteminde ise 128×128 piksel ebatlarındaki ikon kullanılır.

Bu uygulama için yeni bir Adobe AIR dökümanı açın ve dökümanı kaydedin. Daha sonra components panelinde bulunan Button bileşenini sahneye sürükleyin. Bileşeni sahneye sürükledikten sonra butonu sahne üzerinden silin. Properties panelinde bulunan Adobe AIR Settings bölümündeki Edit butonuna tıklayın ve Açılan pencerede Icons sekmesini kullanarak uygulama için hazırladığınız ikonları uygulamaya dahil edin.

Uygulama sistem tepsisi / Dock menüye küçültüldüğünde kullanıcının tekrar uygulamayı görüntüleyebilmesini sağlamak için bir menü kullanmamız gerekecek. Menülerle çalışabilmek için NativeMenu ve NativeMenuItem sınıflarına ihtiyacımız olacak. NativeMenu menüleri oluşturmak ve kontrol etmek için, NativeMenuItem sınıfı ise menüye yeni seçenekler eklemek için kullanılır.

Actions panelini açarak kodları yazmaya başlayabiliriz. İlk olarak gerekli sınıfları import edeceğiz ve uygulama içerisinde ihtiyacımız olacak nesneleri tanımlayacağız. Button bileşenini sahneye ekledikten sonra olay dinleyici ekleyeceğiz.

import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.desktop.*;
import flash.display.NativeWindow;

var uygulama:NativeApplication = NativeApplication.nativeApplication;
var anaPencere:NativeWindow = stage.nativeWindow;

var kucult_btn:Button=new Button();
anaPencere.stage.addChild(kucult_btn);
kucult_btn.x = (anaPencere.width-kucult_btn.width)/2;
kucult_btn.y =(anaPencere.height-kucult_btn.height)/2;
kucult_btn.label = "Küçült";

var iconLoader:Loader = new Loader();

var menu:NativeMenu;
var kapat:NativeMenuItem;
var goster:NativeMenuItem;
var trayIcon:SystemTrayIcon;
var dockIcon:DockIcon;

kucult_btn.addEventListener(MouseEvent.CLICK, kucult);

function kucult(e:MouseEvent)
{
    trayaKucult();
}

Butona tıklandığında trayaKucult() fonksiyonu çağırılacak. Fonksiyon içerisinde ilk olarak uygulamanın hangi işletim sisteminde çalıştırıldığınız kontrol edeceğiz. Bu işlemi gerçekleştirebilmek içinse NativeApplication sınıfının supportsSystemTrayIcon ve supportsDockIcon özelliklerini kullacağız. Eğer işletim sistemi Windows veya Linux ise ilk özellikten, Macintosh işletim sistemi ise ikinci özellikten dönen değer true olacaktır. İşletim sistemine göre de tanımladığımız Loader nesnesinin hangi ikonu yükleyeceğini belirleyeceğiz. Menüyü oluşturmak için tanımladığımız nesnelerin birer kopyasını oluşruracağız. NativeMenuItem sınıfına ait nesneleri tanımlarken parantez içerisinde menüde görünmesini istediğimiz ifadeyi ekliyoruz. Bu ifadenin String veri türünde olması gerekmektedir. Sonrasında ise tanımladığımız menülere ve Loader nesnesine olay dinleyici ekleyeceğiz.

function trayaKucult()
{
    if (NativeApplication.supportsSystemTrayIcon)
    {
        iconLoader.load(new URLRequest("AppIconsForPublish/16x16.png"));
    }
    else if (NativeApplication.supportsDockIcon)
    {
        iconLoader.load(new URLRequest("AppIconsForPublish/128x128.png"));
    }

    menu = new NativeMenu();
    kapat = new NativeMenuItem("Kapat");
    goster = new NativeMenuItem("Göster");
    menu.addItem(kapat);
    menu.addItem(goster);

    kapat.addEventListener(Event.SELECT, uygulamayiKapat);
    goster.addEventListener(Event.SELECT, uygulamayiGoster);

    iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, iconYuklendi);
}

Yükleme işlemi tamamlandığında fonksiyon içerisinde ilk olarak yüklenen ikon görselini NativeApplication sınıfının icon.bitmaps özelliğine değer olarak atayacağız ve yine uygulamanın çalıştırıldığı işletim sistemine göre trayIcon nesnesini mi yoksa dockIcon nesnesini mi kullanacağınız belirleyip uygulamayı gizleyeceğiz. uygulamayiKapat fonksiyonu içerisinde exit() metodunu kullanarak uygulamanın kapatılmasını, uygulamayiGoster fonksiyonunun içerisinde ise ilk olarak activate() metodu ile pencerenin açık pencereler içerisinde en üste gelmesini sağladıktan sonra visible özelliğinin değerini true olarak değiştirerek pencerenin tekrar görünür olmasını sağlayacağız.

function iconYuklendi(e:Event)
{
    uygulama.icon.bitmaps = [e.target.content.bitmapData];

    if (NativeApplication.supportsSystemTrayIcon)
    {
        trayIcon = uygulama.icon as SystemTrayIcon;
        trayIcon.menu = menu;
    }
    else if (NativeApplication.supportsDockIcon)
    {
        dockIcon = uygulama.icon as DockIcon;
        dockIcon.menu = menu;
    }

    anaPencere.visible = false;
}

function uygulamayiKapat(e:Event)
{
    uygulama.exit();
}

function uygulamayiGoster(e:Event)
{
    anaPencere.activate();
    anaPencere.visible = true;
}

Kodların tamamı aşağıdaki gibidir.

import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.desktop.*;
import flash.display.NativeWindow;
import fl.controls.Button;
import flash.display.Loader;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.net.URLRequest;

var uygulama:NativeApplication = NativeApplication.nativeApplication;
var anaPencere:NativeWindow = stage.nativeWindow;

var kucult_btn:Button=new Button();
anaPencere.stage.addChild(kucult_btn);
kucult_btn.x = (anaPencere.width-kucult_btn.width)/2;
kucult_btn.y =(anaPencere.height-kucult_btn.height)/2;
kucult_btn.label = "Küçült";

var iconLoader:Loader = new Loader();

var menu:NativeMenu;
var kapat:NativeMenuItem;
var goster:NativeMenuItem;
var trayIcon:SystemTrayIcon;
var dockIcon:DockIcon;

kucult_btn.addEventListener(MouseEvent.CLICK, kucult);

function kucult(e:MouseEvent)
{
    trayaKucult();
}

function trayaKucult()
{
    if (NativeApplication.supportsSystemTrayIcon)
    {
        iconLoader.load(new URLRequest("AppIconsForPublish/16x16.png"));
    }
    else if (NativeApplication.supportsDockIcon)
    {
        iconLoader.load(new URLRequest("AppIconsForPublish/128x128.png"));
    }

    menu = new NativeMenu();
    kapat = new NativeMenuItem("Kapat");
    goster = new NativeMenuItem("Göster");
    menu.addItem(kapat);
    menu.addItem(goster);

    kapat.addEventListener(Event.SELECT, uygulamayiKapat);
    goster.addEventListener(Event.SELECT, uygulamayiGoster);

    iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, iconYuklendi);
}

function iconYuklendi(e:Event)
{
    uygulama.icon.bitmaps = [e.target.content.bitmapData];

    if (NativeApplication.supportsSystemTrayIcon)
    {
        trayIcon = uygulama.icon as SystemTrayIcon;
        trayIcon.menu = menu;
    }
    else if (NativeApplication.supportsDockIcon)
    {
        dockIcon = uygulama.icon as DockIcon;
        dockIcon.menu = menu;
    }
   
    anaPencere.visible = false;
}

function uygulamayiKapat(e:Event)
{
    uygulama.exit();
}

function uygulamayiGoster(e:Event)
{
    anaPencere.activate();
    anaPencere.visible = true;
}
Örnek çalışma dosyasını indirebilmek için siteye üye olmanız gerekmektedir. Siteye üye olmak için tıklayın.

, , , ,

  1. #1 by er3ner3n on 27 Ocak 2011 - 09:09

    Çok iyi!

(yayınlanmayacak)

Login with Facebook:
 

Additional comments powered by BackType