Um ein Symbol in der TNA ablegen zu können, brauchen wir zuerst das
ShellAPI.pas" eingebunden haben, können wir die meisten Variablen bereits während der Initialisierung füllen:
var
NID : TNotifyIconData = (
cbSize : sizeof(TNotifyIconData);
uID : 1052002;
uFlags : NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage : WM_TNAMSG;
hIcon : 0;
szTip : szClassname;
);
Ich habe im Beispiel als Wert für uID das Datum gewählt. Sie können nach diesem Prinzip vorgehen und jedem Ihrer TNA-Programme eine eindeutige ID zuordnen. Sie können ebenso aber auch den Wert Null benutzen. Wichtig ist, dass Sie für jedes TNA-Symbol, das Ihr Programm verwendet, eine eigene ID benutzen, da dies sozusagen der Kanal ist, auf dem das Betriebssystem und Ihr Programm die einzelnen Symbole ansprechen. Die Variable uCallbackMessage besitzt eine Nachricht namens "WM_TNAMSG" als Wert. Diese Nachricht existiert nicht im System, sie vom Programm definiert:
const
WM_TNAMSG = WM_USER + 10;
Außerdem sei noch ein Wort zu den Flags gestattet:
| Wert | Bedeutung |
|---|---|
| NIF_MESSAGE | wir wollen Nachrichten bearbeiten, also muss uCallbackMessage eine gültige Variable bezeichnen |
| NIF_ICON | wir wollen ein Icon sehen, also muss ein hIcon gültiges Symbol-Handle sein |
| NIF_TIP | ein Tooltipp soll zu sehen sein |
Es fehlen noch zwei Dinge, damit unser Kontakt zustande kommt: wir müssen das Fenster-Handle und ein Symbol festlegen. Da wir das Handle zum Zeitpunkt der Variablen-Initialisierung nicht kennen (können), weisen wir es während der Erzeugung zu:
WM_CREATE:
begin
NID.wnd := wnd; // Fenster-Handle
NID.hIcon := LoadIcon(0,IDI_INFORMATION); // Icon laden
Shell_NotifyIcon(NIM_ADD,@NID); // Icon anzeigen
end;
In der letzten Zeile sehen Sie auch gleich den Befehl
| Wert | Bedeutung |
|---|---|
| NIM_ADD | das Symbol wird hinzugefügt |
| NIM_DELETE | das Symbol wird entfernt |
| NIM_MODIFY | das Symbol wird geändert (das gilt auch für den Tooltipp) |
Bevor Sie das Programm also testen, sollten Sie dafür sorgen, dass das Symbol beim Beenden wieder entfernt wird. Wenn Sie das vergessen, dann entfernt das System das Symbol, sobald Sie mit dem Mauszeiger drauf kommen. Aber es sieht unschön aus, also sollten Sie daran denken:
WM_DESTROY:
begin
Shell_NotifyIcon(NIM_DELETE,@NID); // Icon entfernen
PostQuitMessage(0);
end;