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 lì l'icona della tua applicazione Delphi? Vorresti che quell'icona fosse animata o rispecchi 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 è rendere le tue applicazioni Delphi come se si stessero minimizzando nel vassoio (invece che nella barra delle attività, direttamente al pulsante Win Start) posizionando un'icona nel vassoio e contemporaneamente rendendo invisibili i tuoi moduli.
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.
La funzione è definita nell'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 una descrizione comando quando il mouse si trova sopra l'icona, la maniglia della finestra che riceverà i messaggi dell'icona e il tipo di messaggio che l'icona invierà a questa 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 privatepubblicoDichiarazioni pubblichefine;
Quindi, nel metodo OnCreate del modulo principale, inizializza la struttura dei 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: = Application.Icon.Handle;
StrPCopy (szTip, Application.Title);
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. 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.
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.
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. Puoi farlo nel gestore di eventi OnDestroy per il modulo principale.