Sistem Tepsisi Delphi Uygulaması

Görev Çubuğunuza bir göz atın. Saatin bulunduğu bölgeyi görüyor musunuz? Orada başka ikonlar var mı? Yere Windows Sistem Tepsisi denir. Yerleştirmek ister misiniz Delphi uygulamanın simgesi var mı? Bu simgenin animasyonlu olmasını ister misiniz yoksa uygulamanızın durumunu yansıtır mısınız?

Bu, kullanıcı etkileşimi olmadan uzun süre çalışır durumda kalan programlar için yararlıdır (arka plan görevleri genellikle gün boyu PC'nizde çalışmaya devam eder).

Yapabileceğiniz şey Delphi uygulamalarınızın Tepsi'ye küçültülmüş gibi görünmesini sağlamaktır ( Görev Çubuğu, sağa Win Start (Başlat) düğmesine basın) ve aynı anda form (lar) ınızı oluşturarak görünmez.

Haydi Tepsi Olsun

Neyse ki, sistem tepsisinde çalışan bir uygulama oluşturmak oldukça kolaydır - görevi gerçekleştirmek için yalnızca bir (API) işlevi, Shell_NotifyIcon gereklidir.

İşlev, ShellAPI birimi ve iki parametre gerektirir. Birincisi, simgenin eklendiğini, değiştirildiğini veya kaldırıldığını gösteren bir işarettir ve ikincisi, simgeyle ilgili bilgileri tutan bir TNotifyIconData yapısına bir işaretçi. Gösterilecek simgenin tutamacını, fare simgenin üzerindeyken araç ipucu olarak gösterilecek metni, simgesinin iletilerini alacak pencerenin tutamacı ve simgenin buna göndereceği ileti türü penceresi.

instagram viewer

İlk olarak, ana formunuzun Özel bölümüne satırı ekleyin:
TrayIconData: TNotifyIconData;

tip
TMainForm = sınıf(TForm)
prosedür FormCreate (Gönderen: TObject);
özel
TrayIconData: TNotifyIconData;
{Özel beyanlar}halka açık{Herkese açık beyanlar}son;

Sonra, ana formunuzda OnCreate yönteminde, TrayIconData veri yapısını başlatın ve Shell_NotifyIcon işlevini çağırın:

ile TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Sap;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Uygulama. Simge. Üstesinden gelmek;
StrPCopy (szTip, Uygulama. Başlık);
son;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

TrayIconData yapısının Wnd parametresi, bir simgeyle ilişkili bildirim iletilerini alan pencereyi gösterir.

HIcon, Kasete eklemek istediğimiz simgeye işaret eder - bu durumda Uygulamalar ana simgesi kullanılır.
SzTip, simge için görüntülenecek Araç İpucu metnini tutar - bizim durumumuzda uygulamanın başlığı. SzTip 64 karakter içerebilir.
UFlags parametresi, simgeye uygulama mesajlarını işlemesini, uygulamanın simgesini ve ipucunu kullanmasını söyleyecek şekilde ayarlanmıştır. uCallbackMessage uygulama tanımlı mesaj tanımlayıcısına işaret eder. Sistem, simgenin sınırlayıcı dikdörtgeninde bir fare olayı meydana geldiğinde Wnd tarafından tanımlanan pencereye gönderdiği bildirim mesajları için belirtilen tanımlayıcıyı kullanır. Bu parametre, form biriminin arayüz bölümünde tanımlanan WM_ICONTRAY sabitine ayarlanır ve şuna eşittir: WM_USER + 1;

Simgeyi, Shell_NotifyIcon API işlevini çağırarak Kasete eklersiniz. İlk parametre "NIM_ADD", Kaset alanına bir simge ekler. Diğer iki olası değer olan NIM_DELETE ve NIM_MODIFY, Tepsideki bir simgeyi silmek veya değiştirmek için kullanılır - bu makalede daha sonra nasıl göreceğinizi göreceğiz. Shell_NotifyIcon öğesine gönderdiğimiz ikinci parametre, başlatılan TrayIconData yapısıdır.

Bir tane al

Projenizi şimdi ÇALIŞTIRIRsanız, Kasetteki Saat'in yanında bir simge göreceksiniz. Üç şeye dikkat edin.

1) İlk olarak, Tepsiye yerleştirilen simgeye tıkladığınızda (veya fareyle başka bir şey yaptığınızda) hiçbir şey olmuyor - henüz bir prosedür (mesaj işleyici) oluşturmadık.
2) İkincisi, Görev Çubuğunda bir düğme var (açıkçası orada istemiyoruz).
3) Üçüncü olarak, uygulamanızı kapattığınızda simge Tepside kalır.

İki tane al

Bunu geriye doğru çözelim. Uygulamadan çıktığınızda simgenin Tepsi'den kaldırılmasını sağlamak için, Shell_NotifyIcon öğesini tekrar çağırmanız gerekir, ancak ilk parametre NIM_DELETE ile. Bunu OnDestroy'da yaparsınız olay işleyicisi Ana form için.

prosedür TMainForm. FormDestroy (Gönderen: TObject);
başla
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
son;

Uygulamayı (uygulamanın düğmesi) Görev Çubuğundan gizlemek için basit bir numara kullanacağız. Projeler kaynak koduna aşağıdaki satırı ekleyin: Application. ShowMainForm: = Yanlış; uygulamadan önce. CreateForm (TMainForm, MainForm); Örneğin şöyle görünmesine izin verin:

...
başla
Uygulama. başlat;
Uygulama. ShowMainForm: = Yanlış;
Uygulama. CreateForm (TMainForm, MainForm);
Uygulama. Çalıştırmak;
son.

Son olarak, Tepsi simgesimizin fare olaylarına yanıt vermesi için bir mesaj işleme prosedürü oluşturmamız gerekir. İlk olarak, form bildiriminin genel kısmında bir ileti işleme yordamı beyan ederiz: yordam TrayMessage (var Msg: TMessage); mesaj WM_ICONTRAY; İkincisi, bu prosedürün tanımı şuna benzer:

prosedür TMainForm. TrayMessage (var Msg: TMessage);
begincase Msg.lParam nın-nin
WM_LBUTTONDOWN:
başla
ShowMessage ('Sol düğme tıklandı
- Formu GÖSTERelim! ');
Ana form. Göstermek;
son;
WM_RBUTTONDOWN:
başla
ShowMessage ('Sağ tuş tıklandı
- Formu Gizleyelim! ');
Ana form. Saklamak;
son;
son;
son;

Bu prosedür yalnızca mesajımızı WM_ICONTRAY işleyecek şekilde tasarlanmıştır. Prosedürün aktivasyonu üzerine farenin durumunu bize verebilecek mesaj yapısından LParam değerini alır. Basit olması için sadece sol fareyi aşağı (WM_LBUTTONDOWN) ve sağ fareyi aşağı (WM_RBUTTONDOWN) ele alacağız. Farenin sol düğmesi simgenin üzerinde olduğunda ana formu gösteririz, sağ düğmeye basıldığında gizleriz. Tabii ki, prosedür yukarı, düğme yukarı, düğme çift tıklama vb gibi işleyebileceğiniz diğer fare giriş mesajları vardır.

Bu kadar. Çabuk ve kolay. Ardından, Tepsideki simgenin nasıl canlandırılacağını ve bu simgenin uygulamanızın durumunu nasıl yansıttığını göreceksiniz. Dahası, simgenin yanında bir açılır menünün nasıl görüntüleneceğini göreceksiniz.

instagram story viewer