Bekijk uw taakbalk. Zie je het gebied waar de tijd zich bevindt? Zijn er andere pictogrammen daar? De plaats wordt het Windows-systeemvak genoemd. Wilt u het pictogram van uw Delphi-toepassing daar plaatsen? Wilt u dat dat pictogram wordt geanimeerd - of de status van uw toepassing weerspiegelt?
Dit zou handig zijn voor programma's die langdurig actief blijven zonder gebruikersinteractie (achtergrondtaken die u meestal de hele dag op uw pc blijft uitvoeren).
Wat u kunt doen, is uw Delphi-applicaties eruit laten zien alsof ze worden geminimaliseerd naar het systeemvak (in plaats van naar de taakbalk, rechtstreeks naar de knop Win Start) door een pictogram in het systeemvak te plaatsen en tegelijkertijd uw formulier (en) onzichtbaar te maken.
Gelukkig is het maken van een applicatie die in het systeemvak wordt uitgevoerd vrij eenvoudig - slechts één (API) functie, Shell_NotifyIcon, is nodig om de taak te volbrengen.
De functie is gedefinieerd in de ShellAPI-eenheid en vereist twee parameters. De eerste is een vlag die aangeeft of het pictogram wordt toegevoegd, gewijzigd of verwijderd, en de tweede is een wijzer naar een TNotifyIconData-structuur met de informatie over het pictogram. Dat omvat de greep van het pictogram dat moet worden weergegeven, de tekst die moet worden weergegeven als een tooltip wanneer de muis zich boven het pictogram bevindt, de greep van het venster dat de berichten van het pictogram ontvangt en het berichttype dat het pictogram naar dit venster verzendt..
Zet eerst in de privésectie van uw hoofdformulier de regel:
TrayIconData: TNotifyIconData;
type
TMainForm = klasse(TForm)
procedure FormCreate (afzender: TObject);
privaat
TrayIconData: TNotifyIconData;
Privé verklaringenopenbaarPublieke verklaringeneinde;
Initialiseer vervolgens in de OnCreate-methode van uw hoofdformulier de gegevensstructuur van TrayIconData en roep de functie Shell_NotifyIcon aan:
met TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Handvat;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Application.Icon.Handle;
StrPCopy (szTip, Application.Title);
einde;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);
De parameter Wnd van de structuur TrayIconData wijst naar het venster dat meldingsberichten ontvangt die aan een pictogram zijn gekoppeld.
Het hIcon verwijst naar het pictogram dat we aan het systeemvak willen toevoegen - in dit geval wordt het hoofdpictogram Toepassingen gebruikt.
De szTip bevat de Tooltip-tekst die wordt weergegeven voor het pictogram - in ons geval de titel van de toepassing. De szTip kan maximaal 64 tekens bevatten.
De parameter uFlags is ingesteld om het pictogram te laten weten dat het toepassingsberichten moet verwerken, het pictogram en de tip van de toepassing moet gebruiken. De uCallbackMessage verwijst naar de door de toepassing gedefinieerde bericht-ID. Het systeem gebruikt de opgegeven identificatie voor meldingsberichten die het naar het door Wnd geïdentificeerde venster verzendt wanneer zich een muisgebeurtenis voordoet in de omringende rechthoek van het pictogram. Deze parameter is ingesteld op WM_ICONTRAY constante gedefinieerd in het interface-gedeelte van de formuliereneenheid en is gelijk aan: WM_USER + 1;
U voegt het pictogram toe aan de lade door de API-functie Shell_NotifyIcon aan te roepen. De eerste parameter "NIM_ADD" voegt een pictogram toe aan het systeemvak. De andere twee mogelijke waarden, NIM_DELETE en NIM_MODIFY worden gebruikt om een pictogram in het systeemvak te verwijderen of aan te passen - we zullen later in dit artikel zien. De tweede parameter die we naar Shell_NotifyIcon verzenden, is de geïnitialiseerde TrayIconData-structuur.
Als je je project nu UITVOERT, zie je een pictogram bij de klok in het systeemvak. Let op drie dingen.
1) Ten eerste gebeurt er niets als u klikt (of iets anders doet met de muis) op het pictogram in het systeemvak - we hebben nog geen procedure (berichtenhandler) gemaakt.
2) Ten tweede is er een knop op de taakbalk (we willen het daar natuurlijk niet).
3) Ten derde, wanneer u uw toepassing sluit, blijft het pictogram in het systeemvak.
Laten we dit achteruit oplossen. Als u het pictogram uit het systeemvak wilt laten verwijderen wanneer u de toepassing afsluit, moet u de Shell_NotifyIcon opnieuw oproepen, maar met de NIM_DELETE als eerste parameter. U doet dit in de OnDestroy-gebeurtenishandler voor het hoofdformulier.