Declaraciones
Código Delphi
[-] private
IconData: TNewNotifyIconData;
procedure SysTrayIconMsgHandler(var Msg: TMessage); message TRAY_CALLBACK;
procedure AddSysTrayIcon;
procedure ShowBalloonTips(titulo,mensage:string;Icono:integer);
procedure DeleteSysTrayIcon;
Este procedimiento crea el icono en la bandeja del sistema y muchas cosas mas que no se demasiado.
Código Delphi
[-]procedure TForm1.AddSysTrayIcon;
begin
IconData.cbSize := SizeOf(IconData);
IconData.Wnd := AllocateHWnd(SysTrayIconMsgHandler);
IconData.uID := 0;
IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
IconData.uCallbackMessage := TRAY_CALLBACK; IconData.hIcon := Application.Icon.Handle; IconData.szTip := ' Titulo de la Aplicacion ';
if not Shell_NotifyIcon(NIM_ADD, @IconData) then
ShowMessage('add fail');
end;
Este procedimiento maneja tanto
ballon message como popupMenu en dicho icono, clicks derecho izq, etc
Código Delphi
[-]procedure TForm1.SysTrayIconMsgHandler(var Msg: TMessage);
var Pt: TPoint;
begin
case Msg.lParam of
WM_MOUSEMOVE:;
WM_LBUTTONDOWN:;
WM_LBUTTONUP:
begin
GetCursorPos(Pt);
SetForeGroundWindow(Application.Handle);
Application.ProcessMessages;
PopupMenu1.Popup(Pt.X,Pt.Y);
end;
WM_LBUTTONDBLCLK:;
WM_RBUTTONDOWN:;
WM_RBUTTONUP:
begin
GetCursorPos(Pt);
SetForeGroundWindow(Application.Handle);
Application.ProcessMessages;
PopupMenu1.Popup(Pt.X,Pt.Y);
end;
WM_RBUTTONDBLCLK:;
NIN_BALLOONSHOW:;
NIN_BALLOONHIDE: ;
NIN_BALLOONTIMEOUT:;
NIN_BALLOONUSERCLICK:;
end;
end;
Proc. para eliminar el icono
Código Delphi
[-]procedure TForm1.DeleteSysTrayIcon;
begin
DeallocateHWnd(IconData.Wnd);
if not Shell_NotifyIcon(NIM_DELETE, @IconData) then
ShowMessage('delete fail');
end;
En el create del form
En el Destroy
Obviamente al no saber mucho de todo esto no lo idee yo, lo encontre buscando "agregar icono en bandeja de sistema".
Espero te sirva, suerte.