Systeemvak Delphi-applicatie

click fraud protection

Kijk eens naar je taakbalk. Zie het gebied waar de tijd zich bevindt? Zijn er nog andere pictogrammen? De plaats wordt het Windows-systeemvak genoemd. Wilt u uw Delphi het toepassingspictogram daar? Wilt u dat dat pictogram geanimeerd wordt - of de status van uw applicatie weerspiegelt?

Dit zou handig zijn voor programma's die lange tijd niet actief zijn zonder gebruikersinteractie (achtergrondtaken die u normaal gesproken de hele dag op uw pc blijft uitvoeren).

Wat u kunt doen, is ervoor te zorgen dat uw Delphi-applicaties eruit zien alsof ze minimaliseren naar de lade (in plaats van naar de Taakbalk, direct naar de Win Start-knop) door een pictogram in de lade te plaatsen en tegelijkertijd uw formulier (en) te maken onzichtbaar.

Laten we het opdienen

Gelukkig is het vrij eenvoudig om een ​​applicatie te maken die in het systeemvak draait - er is maar één (API) functie, Shell_NotifyIcon, 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 aanwijzer naar een TNotifyIconData-structuur met de informatie over het pictogram. Dat omvat het handvat van het pictogram dat moet worden weergegeven, de tekst die moet worden weergegeven als een tooltip wanneer de muis boven het pictogram staat, de handvat van het venster dat de berichten van het pictogram zal ontvangen en het berichttype dat het pictogram hier naartoe zal sturen venster.

instagram viewer

Zet eerst in het privégedeelte van uw hoofdformulier de regel:
TrayIconData: TNotifyIconData;

type
TMainForm = klasse(TForm)
procedure FormCreate (Afzender: TObject);
privaat
TrayIconData: TNotifyIconData;
{Privéverklaringen}openbaar{Openbare verklaringen}einde;

Dan in uw hoofdformulier OnCreate methode, initialiseer 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: = Toepassing. Icoon. Omgaan met;
StrPCopy (szTip, Applicatie. Titel);
einde;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

De Wnd-parameter van de TrayIconData-structuur verwijst naar het venster dat meldingsberichten ontvangt die aan een pictogram zijn gekoppeld.

De hIcon wijst naar het pictogram dat we aan de lade willen toevoegen - in dit geval wordt het hoofdpictogram Toepassingen gebruikt.
De szTip bevat de Tooltip-tekst die voor het pictogram moet worden weergegeven - in ons geval de titel van de applicatie. De szTip kan maximaal 64 tekens bevatten.
De uFlags-parameter is ingesteld om het pictogram te vertellen om toepassingsberichten te verwerken, gebruik het toepassingspictogram en de punt ervan. De uCallbackMessage verwijst naar de door de toepassing gedefinieerde bericht-ID. Het systeem gebruikt de opgegeven identificatie voor meldingsberichten die het naar het venster van Wnd stuurt wanneer een muisgebeurtenis plaatsvindt in de begrenzende rechthoek van het pictogram. Deze parameter is ingesteld op de constante WM_ICONTRAY die is gedefinieerd in het interfacegedeelte van de formuliereneenheid en is gelijk aan: WM_USER + 1;

U voegt het pictogram toe aan de lade door de Shell_NotifyIcon API-functie aan te roepen. De eerste parameter "NIM_ADD" voegt een pictogram toe aan het ladegebied. De andere twee mogelijke waarden, NIM_DELETE en NIM_MODIFY, worden gebruikt om een ​​pictogram in de lade te verwijderen of aan te passen - we zullen later in dit artikel zien hoe. De tweede parameter die we naar Shell_NotifyIcon sturen, is de geïnitialiseerde TrayIconData-structuur.

Neem er een

Als u uw project nu uitvoert, ziet u een pictogram naast de klok in de lade. Let op drie dingen.

1) Ten eerste gebeurt er niets wanneer u klikt (of iets anders doet met de muis) op het pictogram in de lade - we hebben nog geen procedure (berichtenverwerker) gemaakt.
2) Ten tweede is er een knop op de taakbalk (we willen hem daar natuurlijk niet hebben).
3) Ten derde blijft het pictogram in de lade wanneer u uw toepassing sluit.

Tweede poging

Laten we dit achterstevoren oplossen. Om het pictogram uit de lade te verwijderen wanneer u de applicatie afsluit, moet u de Shell_NotifyIcon opnieuw aanroepen, maar met de NIM_DELETE als de eerste parameter. Dit doe je in de OnDestroy event handler voor het hoofdformulier.

procedure TMainForm. FormDestroy (Afzender: TObject);
beginnen
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
einde;

Om de applicatie (de knop van de applicatie) te verbergen in de taakbalk, gebruiken we een simpele truc. Voeg in de broncode van Projecten de volgende regel toe: Toepassing. ShowMainForm: = False; voor de aanvraag. CreateForm (TMainForm, MainForm); Laat het er bijvoorbeeld zo uitzien:

...
beginnen
Toepassing. Initialiseren;
Toepassing. ShowMainForm: = False;
Toepassing. CreateForm (TMainForm, MainForm);
Toepassing. Rennen;
einde.

En tot slot, om ervoor te zorgen dat ons pictogram in het systeemvak reageert op muisgebeurtenissen, moeten we een procedure voor het afhandelen van berichten maken. Eerst verklaren we een procedure voor het afhandelen van berichten in het openbare deel van de formulierverklaring: procedure TrayMessage (var Msg: TMessage); bericht WM_ICONTRAY; Ten tweede ziet de definitie van deze procedure er als volgt uit:

procedure TMainForm. Ladebericht (var Msg: TMessage);
begingeval Msg.lParam van
WM_LBUTTONDOWN:
beginnen
ShowMessage ('Klik met de linkermuisknop
- laten we het formulier TOON! ');
Belangrijkste vorm. Tonen;
einde;
WM_RBUTTONDOWN:
beginnen
ShowMessage ('Klik met de rechtermuisknop
- laten we het formulier VERBERGEN! ');
Belangrijkste vorm. Verbergen;
einde;
einde;
einde;

Deze procedure is ontworpen om alleen ons bericht af te handelen, de WM_ICONTRAY. Het haalt de LParam-waarde uit de berichtenstructuur die ons de toestand van de muis kan geven bij het activeren van de procedure. Gemakshalve behandelen we alleen de linkermuisknop (WM_LBUTTONDOWN) en de rechtermuisknop (WM_RBUTTONDOWN). Als de linkermuisknop ingedrukt is op het pictogram, tonen we het hoofdformulier, als de rechterknop wordt ingedrukt, verbergen we het. Natuurlijk zijn er nog andere muisinvoerberichten die u in de procedure kunt verwerken, zoals knop omhoog, knop dubbelklikken enz.

Dat is het. Snel en gemakkelijk. Vervolgens ziet u hoe u het pictogram in de lade kunt animeren en hoe u dat pictogram de status van uw toepassing kunt laten weergeven. Sterker nog, u zult zien hoe u een pop-upmenu naast het pictogram weergeeft.

instagram story viewer