Makale Özeti

Yapmış olduğumuz programların, bilgisayar kullanıcısının farklı uygulamalarla uğraşırken, onu rahatsız etmeden arka planda çalışmasını isteyebiliriz. Örnek olarak anti-virüs programları biz bilgisayarımızda nette sörf yaparken veya her hangi bir işlemle uğraşırken, daima bilgisayarımızı virüslere karşı kontrol ederler. Her hangi bir virüs bulduklarında bizi o durumdan haberdar ederler.

Makale

SystemTray Kullanımı

SystemTray Kullanımı

 

Yapmış olduğumuz programların, bilgisayar kullanıcısının farklı uygulamalarla uğraşırken, onu rahatsız etmeden arka planda çalışmasını isteyebiliriz. Örnek olarak anti-virüs programları biz bilgisayarımızda nette sörf yaparken veya her hangi bir işlemle uğraşırken, daima bilgisayarımızı virüslere karşı kontrol ederler. Her hangi bir virüs bulduklarında bizi o durumdan haberdar ederler. İşte buradaki anti-virüs programları SystemTray denilen alanda bizden bağımsız olarak çalışmaktadırlar. Bu yazıda, sizlerle, uygulamamıza nasıl SystemTray özelliğini ekleyeceğimizi inleleyeceğiz.

 

ToolBox(AraçKutusu)’ dan NotifyIcon nesnemizi formumuzun üstüne sürükleyip bırakıyoruz. Yapacağımız uygulamımızın SytemTray’e bu nesne sayesinde ekleyeceğiz. Şimdi bu nesnenin özellik ve olaylarını inceleyelim;

 

Name : Her nesnenin elbette bir adı olmalı. Bizim nesnemizin adıda NotifyIcon1. istersek bu adı değiştirebiliriz.

ContextMenu : Faremiz ile systemtray deki iconların üzerine gelip sağ tuşla tıkladığımız zaman karşımıza bir popup menü gelir. Formumuza tollbox dan ContextMenu ekleyebilir ve bu menüyü systemtray de kullanmak istersek NotifyIcon’nun bu özelliğine ContextMenu’müzün ismini atıyoruz. Faremizle iconumuza tıkladığımız zaman karşımıza, hazırladığımız bu ContextMenu’müz gelecektir.

Icon : Uygulamamızın SystemTary’de hangi icon ile gösterilmesini istiyorsak bu özellik ile istediğimiz iconumuzu, karşımıza çıkan diyalog kutusu aracılığı ile bulup kullanabiliriz.

Text : Faremiz ile iconun üzerine geldiğimiz zaman iconun üstünde bir açıklama satırı çıkar. Bu satırın içeriğini buraya yazarız.

Visible : Iconun systemtray’de gözüküp gözükmeyeceğini bu özellik ile belirleriz.

 

Şimdide bu nesnenin olaylarının inceleyelim;

 

Click : SystemTray’de faremizle iconumuzun üstüne geldiğimiz zaman tek tıkladığımızda ne olmasını istiyorsak bu olay içine gerekli kodları yazarız.

DoubleClick:SystemTray’de faremizle

iconumuzun üstüne geldiğimiz zaman çift tıkladığımız zaman ne olmasını iztiyorsak bu olay içine gerekli kodları yazarız.

MouseDown : İconun üzerinde iken faremizin tuşuna basıp çekerken bu olay çalışır. Bu olayın olduğu zaman gerçekleşmesi istediğimiz kodları buraya yazarız.

MouseMove: Faremiz ile iconun üzerine geldiğimizde bu olay çalışır.

MoueUp:  İconun üzerinde iken faremizin tuşuna bastığımız zaman bu olay çalışır.

 

Şimdi sizler ile ufak bir uygulama yazıp bunu SystemTray’e ekleyelim. Benim aklıma ekranda saat ve tarihi gösteren bir program yapmak geldi. Bunun için formumuza bir label, bir tane notifyicon ve bir adet timer nesnesi ekleyelim.

 

Uygulamamızı çalıştırdığımız zaman belirlediğimiz özelliğe göre aşağıdaki görüntüleri elde edeceğiz.

 

Bunun için ilk öncelikle farem ile iconuma tıkladığım zaman karşıma gelecek olan menüyü tasarlamak istiyorum. Örneğin bu uygulamada ben istediğim zaman sadece saatin veya tarihin ekranda gözükmesini istiyorum.Bunun için aşağıdaki gibi bir menüm olmasını istiyorum.

 

Ben .NET’in bize sağladığı %100 nesne tabanlı programlama özelliğini kullanarak menümü programımın çalışma zamanında oluşturmak istiyorum. Siz isterseniz tollbox’dan hazır olarak contextmenu’sünü kullanabilirsiniz.

 

private MenuItem[] menu= new MenuItem[7]

 

Yedi elemanlı MenuItem tipinde bir dizi tanımlıyorum.

 

     

private void Baslangic()

            {

            NotifyIcon1.Text ="Zaman";

            NotifyIcon1.Visible = true;

            Yeni bir menü elemanı tanımlıyorum

            menu[0] = new MenuItem("Aktif Olan");         

           

            Menüme alt bir menü elemanı ekliyorum. Bu elemının text özelliğine “Saat” değerini atıtorum ve bu menü tıklandığı zaman çalışmasını istediğim fonksiyonu yazıyorum

            menu[0].MenuItems.Add("Saat",new EventHandler(this.Saat));

           

            menümün birinci elemanın,birinci alt menüsünün checked özelliğine true değerini atıyorum, bu sayede ilk başlangıçta o seçenek secili olarak gözükecek

            menu[0].MenuItems[0].Checked=true;

           

            menümün birinci elemanına bir alt menü daha ekliyorum

            menu[0].MenuItems.Add("Tarih",new EventHandler(this.Tarih));

            menu[0].MenuItems[1].Checked=false;

           

            menümdeki düz çizgiyi aşağıdaki gibi oluşturuyorum. Yeni bir eleman tanımlayıp text özelliğine “-“(düz çizgi) atıyorum.

            menu[1]=new MenuItem("-");

           

            menu[2]=new MenuItem("Saati Göster",new  EventHandler(this.FormuGoster));

            menu[2].Checked=true;

            menu[3] = new MenuItem("-");

           

            menu[4] = new MenuItem("Saati Gizle", new EventHandler(this.Gizle));

                 

            menu[5] = new MenuItem("-");

                 

            menu[6] = new MenuItem("Çıkış", new EventHandler(this.FormuKapat));

           

            oluşturduğum menüyü NotifyIconun contextMenu özelliğine atayabilmek için bir tane ContextMenu tipinde değişken tanımlayıp içine oluşturduğum menüyü atıyorum.

            ContextMenu NotifyIconMenum = new ContextMenu(menu);

 

            Tanımladığım ContextMenu tipindeki menüyü NotifyIcon’un ContextMenu özelliğine atıyorum.

            NotifyIcon1.ContextMenu=NotifyIconMenum;

                 

            }

 

 

Şimdi menülerine tıklandığı zaman gerçekleşmesi istediğim kod bloklarını yazıyorum;

 

Formumun kurucu metoduna Baslangic() fonksiyonumu yazıyorum;

      public Form1()

            {

                  //

                  // Required for Windows Form Designer support

                  //

                  InitializeComponent();

                  //

                  // TODO: Add any constructor code after InitializeComponent call

                  //

                  Baslangic();

                 

            }

 

Formumun Load eventine:

private void Form1_Load(object sender, System.EventArgs e)

{

DateTime dt = DateTime.Now;

label1.Text=dt.Hour.ToString()+":"+dt.Minute.ToString()+":"+dt.Second.ToString();

}

 

Formun Actived eventine:

private void Form1_Activated(object sender, System.EventArgs e)

{

Form1.ActiveForm.ControlBox=false;

}

      public void FormuGoster(object sender, EventArgs e)

            {

                  menu[2].Checked=true;

                  menu[4].Checked=false;

                  this.Show();

            }

 

            public void Gizle(object sender, EventArgs e)

            {

                  menu[4].Checked=true;

                  menu[2].Checked=false;

                  this.Visible=false;    

            }

 

            public void FormuKapat(object sender, EventArgs e)

            {

                  WSNotifyIcon.Visible=false;

                  this.Close();

            }

     

            public void Saat(object sender, EventArgs e)

            {

                  this.Text="Saat";

                  menu[0].MenuItems[0].Checked=true;

                  menu[0].MenuItems[1].Checked=false;

                            

                  menu[2].Text="Saati Göster";

                  menu[4].Text="Saati Gizle";

            }

           

            public void Tarih(object sender, EventArgs e)

            {

                  this.Text="Tarih";

                  menu[0].MenuItems[1].Checked=true;

                  menu[0].MenuItems[0].Checked=false;

                            

                  menu[2].Text="Tarihi Göster";

                  menu[4].Text="Tarihi Gizle";

            }

 

 

 

Timer nesnesinin eventine:

private void timer1_Tick(object sender, System.EventArgs e)

{

DateTime dt = DateTime.Now;

if(this.Text=="Saat")

label1.Text=dt.Hour.ToString()+":"+dt.Minute.ToString()+":"+dt.Second.ToString();

else

label1.Text=dt.ToLongDateString();

}

           

Bu kodları yazdıktan sonra, kodlarımızı derlediğimiz zaman bilgisayarımızın sağ alt köşesinde uygulamamızın yerini aldığını göreceğiz.

Hepinize iyi kodlamalar…….

Turgay AYDOĞAN

turgaytr@hotmail.com