Vassoio di sistema Applicazione Delphi

Dai un'occhiata alla tua barra delle attività. Vedi l'area in cui si trova l'ora? Ci sono altre icone lì? Il posto si chiama barra delle applicazioni di Windows. Vuoi posizionare il tuo Delphi icona dell'applicazione lì? Desideri che l'icona venga animata o rifletta lo stato della tua applicazione?

Ciò sarebbe utile per i programmi che rimangono in esecuzione per lunghi periodi di tempo senza alcuna interazione da parte dell'utente (attività in background che in genere continuano a funzionare sul PC tutto il giorno).

Quello che puoi fare è far sembrare che le tue applicazioni Delphi stiano minimizzando sul vassoio (invece che su Barra delle attività, direttamente al pulsante Win Start) posizionando un'icona nella barra delle applicazioni e realizzando contemporaneamente i moduli invisibile.

Tray It

Fortunatamente, la creazione di un'applicazione che viene eseguita nella barra delle applicazioni è piuttosto semplice: per eseguire l'operazione è necessaria solo una funzione (API), Shell_NotifyIcon.

instagram viewer

La funzione è definita in Unità ShellAPI e richiede due parametri. Il primo è un flag che indica se l'icona viene aggiunta, modificata o rimossa, e il secondo è un puntatore a una struttura TNotifyIconData che contiene le informazioni sull'icona. Ciò include la maniglia dell'icona da mostrare, il testo da mostrare come suggerimento quando il mouse si trova sopra l'icona, il l'handle della finestra che riceverà i messaggi dell'icona e il tipo di messaggio che l'icona invierà a questo finestra.

Innanzitutto, nella sezione privata del modulo principale metti la linea:
TrayIconData: TNotifyIconData;

genere
TMainForm = classe(TForm)
procedura FormCreate (Mittente: TObject);
privato
TrayIconData: TNotifyIconData;
{Dichiarazioni private}pubblico{Dichiarazioni pubbliche}fine;

Quindi, nella tua forma principale OnCreate metodo, inizializza la struttura dati TrayIconData e chiama la funzione Shell_NotifyIcon:

con TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Handle;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Applicazione. Icona. Maniglia;
StrPCopy (szTip, Applicazione. Titolo);
fine;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

Il parametro Wnd della struttura TrayIconData punta alla finestra che riceve i messaggi di notifica associati a un'icona.

L'hIcon punta sull'icona che vogliamo aggiungere al vassoio - in questo caso, viene utilizzata l'icona principale Applicazioni.
SzTip contiene il testo della descrizione comandi da visualizzare per l'icona, nel nostro caso il titolo dell'applicazione. SzTip può contenere fino a 64 caratteri.
Il parametro uFlags è impostato per indicare all'icona di elaborare i messaggi dell'applicazione, utilizzare l'icona dell'applicazione e il suo suggerimento. Il uCallbackMessage punta all'identificatore del messaggio definito dall'applicazione. Il sistema utilizza l'identificatore specificato per i messaggi di notifica che invia alla finestra identificata da Wnd ogni volta che si verifica un evento del mouse nel rettangolo di delimitazione dell'icona. Questo parametro è impostato sulla costante WM_ICONTRAY definita nella sezione interfaccia dell'unità moduli ed è uguale a: WM_USER + 1;

È possibile aggiungere l'icona al vassoio chiamando la funzione API Shell_NotifyIcon. Il primo parametro "NIM_ADD" aggiunge un'icona all'area del vassoio. Gli altri due valori possibili, NIM_DELETE e NIM_MODIFY vengono utilizzati per eliminare o modificare un'icona nel vassoio: vedremo come più avanti in questo articolo. Il secondo parametro che inviamo a Shell_NotifyIcon è la struttura TrayIconData inizializzata.

Prendere una

Se esegui il tuo progetto ora vedrai un'icona vicino all'orologio nel vassoio. Nota tre cose.

1) In primo luogo, non accade nulla quando si fa clic (o si fa qualsiasi altra cosa con il mouse) sull'icona collocata nel vassoio - non abbiamo ancora creato una procedura (gestore dei messaggi).
2) In secondo luogo, c'è un pulsante sulla barra delle attività (ovviamente non lo vogliamo lì).
3) In terzo luogo, quando si chiude l'applicazione, l'icona rimane nel vassoio.

Prendi due

Risolviamolo all'indietro. Per rimuovere l'icona dal vassoio quando si esce dall'applicazione, è necessario chiamare nuovamente Shell_NotifyIcon, ma con NIM_DELETE come primo parametro. Lo fai in OnDestroy gestore di eventi per il modulo principale.

procedura TMainForm. FormDestroy (Mittente: TObject);
inizio
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
fine;

Per nascondere l'applicazione (pulsante dell'applicazione) dalla barra delle applicazioni utilizzeremo un semplice trucco. Nel codice sorgente di progetti aggiungere la seguente riga: Applicazione. ShowMainForm: = False; prima dell'applicazione. CreateForm (TMainForm, MainForm); Ad esempio, lascia che sembri:

...
inizio
Applicazione. Inizializzare;
Applicazione. ShowMainForm: = False;
Applicazione. CreateForm (TMainForm, MainForm);
Applicazione. Correre;
fine.

Infine, per far sì che la nostra icona del vassoio risponda agli eventi del mouse, è necessario creare una procedura di gestione dei messaggi. In primo luogo, dichiariamo una procedura di gestione dei messaggi nella parte pubblica della dichiarazione del modulo: procedura TrayMessage (var Msg: TMessage); messaggio WM_ICONTRAY; In secondo luogo, la definizione di questa procedura è simile a:

procedura TMainForm. TrayMessage (var Messaggio: TMessage);
begincase Msg.lParam di
WM_LBUTTONDOWN:
inizio
ShowMessage ("Clic sinistro"
- mostriamo il modulo! ');
MainForm. Mostrare;
fine;
WM_RBUTTONDOWN:
inizio
ShowMessage ('Clic con il tasto destro
- NASCONDI la Forma! ');
MainForm. Nascondere;
fine;
fine;
fine;

Questa procedura è progettata per gestire solo il nostro messaggio, WM_ICONTRAY. Prende il valore LParam dalla struttura del messaggio che può darci lo stato del mouse all'attivazione della procedura. Per semplicità gestiremo solo il mouse verso il basso (WM_LBUTTONDOWN) e il mouse destro verso il basso (WM_RBUTTONDOWN). Quando il pulsante sinistro del mouse è premuto sull'icona mostriamo il modulo principale, quando viene premuto il pulsante destro lo nascondiamo. Naturalmente, ci sono altri messaggi di input del mouse che puoi gestire nella procedura, come, pulsante su, pulsante doppio clic ecc.

Questo è tutto. Facile e veloce. Successivamente, vedrai come animare l'icona nel vassoio e come far sì che quell'icona rifletta lo stato della tua applicazione. Ancora di più, vedrai come visualizzare un menu a comparsa vicino all'icona.

instagram story viewer