Newsgroup: it.comp.lang.delphi
Titolo: Shell_NotifyIcon !!!!! chi sa qualcosa?

ciao a tutti
io sono Pierluca, chi sa come si usa la funzione Shell_NotifyIcon!
io vorrei fare un programmino che rimane residente e che la sua icona si
vada a posizionare a fianco del'orologio (in basso a destra nello schermo)
grazia per la collaborazione
ciao.
Pierluca
ayse...@libero.it

Ciao Pierluca,
aysepier ha scritto nel messaggio ...

vuoi proprio utilizzare la funzione "Shell_NotifyIcon" ?
Non ti piacciono i componenti ?
E' vero che è meglio far da soli, ma un componente potrebbe semplificarti la
vita ed inoltre per questo genere di componenti dove non c' è nulla da
nascondere, è anche fornito il sorgente, quindi è ben visibile come
utilizzare la "Shell_NotifyIcon".
Ora non ho nessun esempio pronto e non mi sembra il caso di prepararne uno.
Comunque l' API "Shell_NotifyIcon" la puoi utilizzare aggiungendo l' unit
"ShellApi" nella clausola USES della tua unit.
La funzione "Shell_NotifyIcon" richiede due parametri, di cui uno è un flag
mentre il secondo è un puntatore ad una struttura (record) che Delphi ha già
definita.
Se fai riferimento al Win32 SDK trovi tutto quello che ti interessa sapere,
poi in Delphi aggiungi l' unit che ti ho detto e potrai utilizzare l' API
dopo aver inizializzato il record che la stessa richiede.
Per quanto riguarda il componente, su 
http://torry.rimini.com
 trovi molti
componenti per far quello che ti interessa. Se invece vuoi un esempio
pratico vedi il codice del componente oppure scrivi nuovamente, chi lo
possiede te lo posterà subito.
Ti saluto.....ciaooooo !!!
Antonio Tarolla
BSSoftware Tips Mailing - List Support

    Sul libro Mastering Delphi 3 di Cantů c'č un esempio funzionante per
utilizzare la ShellNotifyIcon, tuttavia anche se non č molto complessa č
abbastanza tediosa da implementare... Ti consiglio di dare un'occhiata su
Torry 
http://torry.rimini.com
 o sulla DSP
http://www.programmers.net/mirrors/DSP/
 se trovi qualche componente
(generalmente Free) che fa al caso tuo. Nelle stesse RX Libraries c'č un
componente che controlla la Tray Area.
    Saluti!
______________________________________
Gian Luca Dalla Torre
E - Mail: 
gianluca....@casteo.net
______________________________________

Ciao Peirluca.
Come già ti diceva Antonio la ShellNotifyIcon non è il massimo a livello di
approccio
e un componente è più che buono.
Cmq visto che volevi un esempio....
       unit Traybar;
       interface
       uses
         Windows, Messages, SysUtils, Classes, Graphics, Controls,
         Forms,  Dialogs, Menus, ExtCtrls,ShellAPI;  //ShellAPI è la unit
che ti fa utilizzare la ShellNotify...
       type
         TForm1 = class(TForm)
           PopupMenu1: TPopupMenu;
           Open1: TMenuItem;
           Exit1: TMenuItem;
           Timer1: TTimer;
           procedure FormCreate(Sender: TObject);
           procedure Open1Click(Sender: TObject);
           procedure Exit1Click(Sender: TObject);
           procedure FormClose(Sender: TObject; var Action:TCloseAction);
           procedure Timer1Timer(Sender: TObject);
         private
           { Private declarations }
           procedure WndProc(var Msg : TMessage); override;
         public
           { Public declarations }
           IconData : TNotifyIconData;
           IconCount : integer;
         end;
       var
         Form1: TForm1;
       procedure TForm1.WndProc(var Msg : TMessage);
       var
         p : TPoint;
       begin
         case Msg.Msg of
           WM_USER + 1:
           case Msg.lParam of
             WM_RBUTTONDOWN: begin
                GetCursorPos(p);
                PopupMenu1.Popup(p.x, p.y);
             end
           end;
         end;
         inherited;
       end;
       procedure TForm1.FormCreate(Sender: TObject);
       begin
         BorderIcons := [biSystemMenu];
         IconCount := 0;
         IconData.cbSize := sizeof(IconData);
         IconData.Wnd := Handle;
         IconData.uID := 100;
         IconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
         IconData.uCallbackMessage := WM_USER + 1;
         IconData.hIcon := Application.Icon.Handle;
         StrPCopy(IconData.szTip, Application.Title);
         Shell_NotifyIcon(NIM_ADD, @IconData);
         Timer1.Interval := 1000;
         Timer1.Enabled := true;
       end;
       procedure TForm1.Open1Click(Sender: TObject);
       begin
         Form1.Show;
         ShowWindow(Application.Handle, SW_HIDE);
       end;
       procedure TForm1.Exit1Click(Sender: TObject);
       begin
         Shell_NotifyIcon(NIM_DELETE, @IconData);
         Application.ProcessMessages;
         Application.Terminate;
       end;
       procedure TForm1.FormClose(Sender: TObject; var Action:
TCloseAction);
       begin
         Action := caNone;
         Form1.Hide;
       end;
       procedure TForm1.Timer1Timer(Sender: TObject);
       begin
         case(IconCount) of
           0 : IconData.hIcon := LoadIcon(0, IDI_APPLICATION);
           1 : IconData.hIcon := LoadIcon(0, IDI_ASTERISK);
           2 : IconData.hIcon := LoadIcon(0, IDI_EXCLAMATION);
           3 : IconData.hIcon := LoadIcon(0, IDI_HAND);
           4 : IconData.hIcon := LoadIcon(0, IDI_QUESTION);
           5 : IconData.hIcon := Application.Icon.Handle;
         end;
         inc(IconCount);
         if IconCount > 5 then
           IconCount := 0;
         Application.Title := TimeToStr(Now);
         StrPCopy(IconData.szTip, Application.Title);
         Shell_NotifyIcon(NIM_MODIFY, @IconData);
       end;
       begin
         ShowWindow(Application.Handle, SW_HIDE);
       end.
Bye bye
--
- Carlo -
BSSoftware Tips Mailing-List Support