Newsgroup: it.comp.lang.delphi
Titolo: tray icon

Ho provato 3000 modi diversi di mettere l'icona di un'applicazione nella
tray area... ma non riesco a capire perchč funziona correttamente solo per
poco tempo e poi si blocca!!! L'utilizzo del processore salta al 100% e non
mi č piů possibile richiamare l'applicazione cliccando sull'icona!!!
Che sia un problema di Delphi??? Qualcuno ha avuto gli stessi problemi???
Grazie
Massimiliano Etere
maxe...@infinito.it

> Che sia un problema di Delphi??? Qualcuno ha avuto gli stessi
problemi???
No, Delphi è perfetto.   ;-PPP
Io proverei a postare un po' di codice, invece di dire "ho provato 3000
modi diversi"...
L'uso del processore sale al 100% ?  Ummm... non è che ti incasini con
la gestione dei messaggi?
Ti consiglio 2 cose:
1. Leggi la documentazione relativa di MS : in Delphi richiama l'help
sulla parola "taskbar", e leggiti la parte sulla ShellNotifyIcon.
2. Scaricati da Torry (url nelle faq) il componente TCoolTrayIcon e
magari prova a studiartelo (oppure sfruttalo e basta ;P)
Ciau! Davide DG.

 mi č piů possibile richiamare l'applicazione cliccando sull'icona!!!
Nella librferia Rx c'č qualcosa che fa il caso tuo.
L'ho trovato per caso leggendo l'help durante le vacanze!
--
Emilio Panozzo
mailto: 
emip...@tin.it

 wrote in message
CP8p7.41858$F45.4...@news1.tin.it...

Prova cosě
Aggiungi ShellAPI alle tue Uses
Aggiungi questo al tuo Form principale
       type
         TForm1 = class(TForm)
            ....
         private
           { Private declarations }
           procedure WndProc(var Msg : TMessage); override;
         public
           { Public declarations }
           IconData : TNotifyIconData;
           IconCount : integer;
         end;
       procedure TForm1.WndProc(var Msg : TMessage);
       var
         p : TPoint;
       begin
         case Msg.Msg of
           WM_USER + 1:
           case Msg.lParam of
             WM_RBUTTONDOWN: begin
// Questo č un popupmenu che viene visulizzato quando premi il tasto destro
sull'iconetta
                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;
// Elemento del popup-menu
       procedure TForm1.Open1Click(Sender: TObject);
       begin
         Form1.Show;
         ShowWindow(Application.Handle, SW_HIDE);
       end;
// Elemento del popup-menu
       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;
// Se vuoi ruotare le icone nella tray...
       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;
// Questo aggiungilo se vuoi che la tua appl. parta minimizzata
       begin
         ShowWindow(Application.Handle, SW_HIDE);
       end.