Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Zobrazování ikony v trayi
26. června 2001, 00.00 | Co je to systémový tray, to asi každý ví - malá oblast s
ikonami vedle hodin na hlavním panelu. Dnes se dovíte, jak do traye umístit ikonu své aplikace.
Co je to systémový tray, to asi každý ví - malá oblast s ikonami vedle hodin na hlavním panelu. Ale ne každý už ví, jakým způsobem do traye dostat ikonku své aplikace. V dnešním článku máte možnost se to dovědět.
Jako obvykle si vypomůžeme ukázkovou aplikací, na které bude vše vysvětleno. Její funkce se dá charakterizovat několika body:
- po dobu běhu bude skrytá (nebude mít tedy žádné viditelné okno) a bude zobrazovat jen svou ikonu v trayi
- při kliknutí na ikoně levým tlačítkem myši se objeví jednoduché hlášení
- při kliknutí pravým tlačítkem naskočí menu o jedné položce, umožňující ukončení aplikace (viz obrázek)
Aplikaci vytvoříme normálně v Delphi pomocí menu File|New Application... Její hlavní formulář sice nebude zobrazen, ale existovat bude, protože a něj vložíme komponentu PopupMenu a také pomocí něj budeme přijímat některé zprávy od Windows. Skrytí formuláře zařídíme tak, že v souboru projektu (View|Project Source) upravíme inicializační sekvenci do následujícího tvaru:
|
Nyní se podívejme, jak přidat ikonu do traye. Slouží k tomu API funkce Shell_NotifyIcon (deklarovaná v unitě ShellAPI), která má dva parametry. První určuje, co vlastně chceme dělat, a může nabývat těchto hodnot:
NIM_ADD | přidání ikony |
NIM_DELETE | odebrání ikony |
NIM_MODIFY | úprava ikony nebo některé z jejích vlastností |
Druhý parametr je odkaz na strukturu typu TNotifyIconData, která ve svých položkách obsahuje různá data potřebná pro zobrazení ikony. Vše shrnuje následující tabulka:
cbSize | velikost struktury v bytech |
Wnd | handle okna, které bude přijímat zprávy související s ikonou |
uID | identifikátor ikony v rámci aplikace (důležité, pokud aplikace přidává do lišty víc ikon) |
uFlags | bitové pole indikující, které položky struktury jsou naplněny |
uCallbackMessage | identifikátor zprávy posílané při událostech myši (přejíždění, klikání) nad ikonou |
hIcon | handle zobrazované ikony |
szTip | tooltip |
Co budeme muset deklarovat v aplikaci někde předem, je identifikátor zprávy (později předaný do položky uID) a samozřejmě samotná struktura NoifyIconData:
|
Pak už můžeme napsat obsluhu událostí OnCreate a OnDestroy hlavního formuláře:
|
Nyní musíme napsat obsluhu zprávy WM_TRAYAPPNOTIFY. Pomocí ní nás Windows budou informovat o akcích, které uživatel nad ikonou v trayi provádí. Proceduru musíme deklarovat už v sekci private nebo public hlavního formuláře (kterou si vybereme je v tomto případě celkem jedno):
|
Při zaslání zprávy se v parametru lParam předává identifikátor zprávy, pomocí kterého určíme, co přesně myš s ikonou prováděla (přejíždění, klikání tlačítky apod.). Podle hodnoty tohoto parametru buď zobrazíme hlášení, nebo kontextové menu. Také nesmíme zapomenout doplnit obsluhu kliknutí myši na položce menu. Procedury vypadají následovně:
|
Tak, to by bylo k tématu ikona v tray vše. Snad bych jen měl dodat, že výše uvedené postupy zapouzdřují i některé komponenty, jedna je např. součástí známé knihovny RX Library.
Ukázkovou aplikaci i se zdrojovým kódem pro Delphi 3 a vyšší si můžete stáhnout zde.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007