Delphi'de System Tray Uygulaması Geliştirme

Windows'ta sağ alt köşede, tarih ve saatin sol tarafında yer alan bölüme System Tray deniyor. Birtakım Windows API'leri yardımıyla, Delphi 7'de yazdığımız programın System Tray'de çalışmasını sağlayabiliyoruz.

İlk yapmamız gerken, en baştaki uses bölümüne ShellApi kısmını eklemek. Sonra uygulamadaki formun tanımlandığı yerin hemen altında bir değişken tanımlıyoruz.

var
  Form1: TForm1;
  stray: NOTIFYICONDATA;

Formun Create olayında aşağıdaki kodları yazıyoruz.

procedure TForm1.FormCreate(Sender: TObject);
begin
  stray.cbSize:=sizeof(NOTIFYICONDATA);
  stray.Wnd:=Form1.Handle;
  stray.uID:=0;
  stray.szTip:='SystemTrayApp'#0;
  stray.uCallbackMessage:=$200;
  stray.uFlags:=7;
  stray.hIcon:=Application.Icon.Handle;
  //system tray'a ekle
  Shell_NotifyIcon(0, @stray);
  //System Tray'de çalışan programın Task Listesinde görünmemesi için
  //ShowWindows(Application.Handel, SW_HIDE);
end;

Eğer System Tray'deki uygulama ikonunu ya da açıklamayı değiştirmek istersek, şöyle bir kullanım yapmalıyız.

procedure TForm1.Button1Click(Sender: TObject);
begin
  //stray parametreleri değiştğinde  Shell_NotifyIcon güncellenmeli
  stray.szTip:='SystemTrayApp çalışıyor'#0;
  Shell_NotifyIcon(1, @stray);
end;

Kullanıcının Sytem Tray'deki uygulama ikonuna fare ile ne şekilde tıkladığını da şu şekilde tespit edebiliyoruz.

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  //System Tray'deki ikonun üzerindeki hareketleri kontorl için formun mousemove olayı kullanılır.
  case x of
    $202: showmessage('Sol tuş tıklandı'); //sol tuşa tıklanınca yapılacaklar
    $203: showmessage('Çift tıklandı'); //çift tıklanınca yapılacaklar
          //form1.show;  //genelde yapılan işlem
    $205: showmessage('Sağ tuş tıklandı');  //sağ tuşa tıklanınca yapılacaklar
          //popupmenu1.popup(m.x,m.y); //genelde yapılan işlem
  end;
end;

Son olarak da, programımızdan çıkıldığında System Tray'deki uygulama ikonunu kaldırmalıyız.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //uygulamayı system tray'den kaldırmak için Shell_NotifyIcon ilk parametresi 2 verilmeli
  Shell_NotifyIcon(2, @stray);
end;

 

27.04.2020 05:05:45

Yorumlar

Bu yazıya henüz yorum yapılmamış.

Yazı hakkında yorum yapmak için, buraya tıklayın.

Kategoriler :

Arşiv :

Etiketler :

Bağlantılar :