Ta en titt på din Aktivitetsfält. Se området där tiden är belägen? Finns det några andra ikoner där? Platsen kallas Windows systemfack. Vill du placera ikonen för din Delphi-applikation där? Vill du att den ikonen ska animeras - eller återspegla applikationens tillstånd?
Detta skulle vara användbart för program som är kvar under lång tid utan användarinteraktion (bakgrundsuppgifter som du vanligtvis fortsätter att köra på din PC hela dagen).
Vad du kan göra är att få dina Delphi-applikationer att se ut som om de minimerar till magasinet (istället för till Aktivitetsfältet, direkt till Win Start-knappen) genom att placera en ikon i facket och samtidigt göra dina (n) form (er) osynliga.
Lyckligtvis är det ganska enkelt att skapa ett program som körs i systemfältet - bara en (API) -funktion, Shell_NotifyIcon, behövs för att utföra uppgiften.
Funktionen definieras i ShellAPI-enheten och kräver två parametrar. Den första är en flagga som indikerar om ikonen läggs till, modifieras eller tas bort, och den andra är en pekare till en TNotifyIconData-struktur som innehåller informationen om ikonen. Det inkluderar handtaget på ikonen som ska visas, texten som ska visas som ett verktygstips när musen är över ikonen, handtaget i fönstret som kommer att ta emot meddelanden på ikonen och meddelandetypen ikonen skickar till det här fönstret.
Först, i din huvudforms privata avsnitt sätter du raden:
TrayIconData: TNotifyIconData;
typ
TMainForm = klass(TForm)
procedur FormCreate (avsändare: TObject);
privat
TrayIconData: TNotifyIconData;
Privata deklarationeroffentligOffentliga förklaringarslutet;
I din huvudforms OnCreate-metod initialiserar du sedan TrayIconData-datastrukturen och kallar Shell_NotifyIcon-funktionen:
med TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Hantera;
uID: = 0;
uFlaggar: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Application.Icon.Handle;
StrPCopy (szTip, Application.Title);
slutet;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);
Wnd-parametern i TrayIconData-strukturen pekar på fönstret som får meddelanden som är associerade med en ikon.
HIcon pekar på ikonen som vi vill lägga till i facket - i detta fall används huvudikonen för applikationer.
SzTip innehåller verktygstipstexten som ska visas för ikonen - i vårt fall applikationens titel. SzTip kan innehålla upp till 64 tecken.
Parametern uFlags är inställd på att berätta för ikonen att behandla applikationsmeddelanden, använda programikonen och dess tips. UCallbackMessage pekar på den applikationsdefinierade meddelanden identifieraren. Systemet använder den angivna identifieraren för meddelanden som det skickar till fönstret som identifieras av Wnd när en mushändelse inträffar i ikonens avgränsande rektangel. Denna parameter är inställd på WM_ICONTRAY-konstant definierad i gränssnittssektionen för formulärenheten och är lika med: WM_USER + 1;
Du lägger till ikonen i magasinet genom att ringa API-funktionen Shell_NotifyIcon. Den första parametern "NIM_ADD" lägger till en ikon i fackområdet. De andra två möjliga värdena, NIM_DELETE och NIM_MODIFY används för att ta bort eller ändra en ikon i facket - vi kommer att se hur senare i den här artikeln. Den andra parametern som vi skickar till Shell_NotifyIcon är den initialiserade TrayIconData-strukturen.
Om du KÖR ditt projekt nu ser du en ikon nära klockan i facket. Notera tre saker.
1) Först händer ingenting när du klickar på (eller gör något annat med musen) på ikonen som finns i facket - vi har ännu inte skapat en procedur (meddelandeshanterare),.
2) För det andra finns det en knapp i Aktivitetsfältet (vi vill uppenbarligen inte ha det där).
3) För det tredje, när du stänger din ansökan, förblir ikonen i facket.
Låt oss lösa detta bakåt. För att få ikonen bort från facket när du lämnar applikationen måste du ringa Shell_NotifyIcon igen, men med NIM_DELETE som den första parametern. Du gör detta i OnDestroy-evenemangshanteraren för huvudformuläret.