Dai un'occhiata alla barra delle applicazioni. Vedi la zona in cui si trova l'ora? Ci sono altre icone lì? Il luogo si chiama barra delle applicazioni di Windows. Vorresti posizionare l'icona della tua applicazione Delphi lì? Vorresti che l'icona fosse animata o che riflettesse lo stato della tua applicazione?
Ciò sarebbe utile per i programmi che vengono lasciati in esecuzione per lunghi periodi di tempo senza alcuna interazione da parte dell'utente (attività in background che in genere si continuano a eseguire sul PC tutto il giorno).
Quello che puoi fare è far sembrare le tue applicazioni Delphi ridotte a icona nel vassoio (invece che nella barra delle applicazioni, direttamente sul pulsante Win Start) posizionando un'icona nella barra delle applicazioni e contemporaneamente rendendo invisibili i tuoi moduli .
Let's 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.
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 suggerimento quando il mouse è 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 Private del tuo modulo principale inserisci la riga:
TrayIconData: TNotifyIconData;
Digitare
TMainForm = classe(TForm)
procedura FormCreate (Sender: TObject);
privato
TrayIconData: TNotifyIconData;
{Dichiarazioni private}pubblico{Dichiarazioni pubbliche}fine;
Quindi, nel metodo OnCreate del modulo principale, inizializza la struttura dati TrayIconData e chiama la funzione Shell_NotifyIcon:
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'icona punta all'icona che vogliamo aggiungere al vassoio: in questo caso viene utilizzata l'icona principale Applicazioni.
Lo szTip contiene il testo della descrizione comando da visualizzare per l'icona, nel nostro caso il titolo dell'applicazione. Lo 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 dell'interfaccia dell'unità dei moduli ed è uguale a: WM_USER + 1;
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) Innanzitutto, non succede nulla quando clicchi (o fai qualcos'altro con il mouse) sull'icona posta nel Tray - non abbiamo ancora creato una procedura (gestore di messaggi).
2) Secondo, c'è un pulsante sulla barra delle applicazioni (ovviamente non lo vogliamo).
3) Terzo, quando chiudi l'applicazione, l'icona rimane nel vassoio.
Take Two
Risolviamolo all'indietro. Per rimuovere l'icona dalla barra delle applicazioni 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 Main.
procedura TMainForm.FormDestroy (Sender: TObject);
iniziare
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
fine;
Per nascondere l'applicazione (il pulsante dell'applicazione) dalla barra delle applicazioni useremo un semplice trucco. Nel codice sorgente dei progetti aggiungere la seguente riga: Application.ShowMainForm: = False; prima di Application.CreateForm (TMainForm, MainForm); Ad esempio, lascia che sembri:
...
iniziare
Application.Initialize;
Application.ShowMainForm: = False;
Application.CreateForm (TMainForm, MainForm);
Application.Run;
fine.
Infine, per fare in modo che la nostra icona nel vassoio risponda agli eventi del mouse, dobbiamo creare una procedura di gestione dei messaggi. Innanzitutto, dichiariamo una procedura di gestione dei messaggi nella parte pubblica della dichiarazione del form: procedure TrayMessage (var Msg: TMessage); messaggio WM_ICONTRAY; In secondo luogo, la definizione di questa procedura è simile a:
procedura TMainForm.TrayMessage (var Msg: TMessage);
caso iniziale Msg.lParam of
WM_LBUTTONDOWN:
iniziare
ShowMessage ('Pulsante sinistro cliccato
- MOSTRIAMO la forma! ');
MainForm.Show;
fine;
WM_RBUTTONDOWN:
iniziare
ShowMessage ('Pulsante destro cliccato
- nascondiamo la forma! ');
MainForm.Hide;
fine;
fine;
fine;
Questa procedura è progettata per gestire solo il nostro messaggio, il 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 tasto sinistro del mouse (WM_LBUTTONDOWN) e il tasto destro del mouse (WM_RBUTTONDOWN). Quando il pulsante sinistro del mouse è in basso sull'icona mostriamo il form 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, doppio clic sul pulsante, ecc.
Questo è tutto. Facile e veloce. Successivamente, vedrai come animare l'icona nel vassoio e come fare in modo che l'icona rifletta lo stato della tua applicazione. Inoltre, vedrai come visualizzare un menu a comparsa vicino all'icona.