Hola
Perdon que me meta pero yo trate con el componente TrayIncon y la verdad no me funciono bien, me genero varios problemas.
Aqui tienes un ejemplo, sin ese componente, tal vez te sirva.
No pude subir el zip, estoy teniendo problemas con esto.
Colocas un popupmenu y le pones abrir en su primer item.
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ShellApi,
Forms, Dialogs, Menus;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Abrir1: TMenuItem;
procedure Abrir1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
IconData : TNotifyIconData;
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
procedure Espabila(var Msg : TMessage); message WM_USER+1;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if (Msg.CmdType = SC_MINIMIZE) then begin
with IconData do
begin
cbSize := sizeof(IconData);
Wnd := Handle;
uID := 100;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_USER + 1;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(NIM_ADD, @IconData);
Hide;
end else DefaultHandler(Msg);
end;
procedure TForm1.Espabila(var Msg : TMessage);
var
p : TPoint;
begin
if Msg.lParam = WM_RBUTTONDOWN then begin
SetForegroundWindow(Handle);
GetCursorPos(p);
PopupMenu1.Popup(p.x, p.y);
PostMessage(Handle, WM_NULL, 0, 0);
end;
end;
procedure TForm1.Abrir1Click(Sender: TObject);
begin
Form1.Show;
ShowWindow(Application.Handle, SW_HIDE);
Shell_NotifyIcon(NIM_DELETE, @IconData);
IconData.Wnd:=0;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if IconData.Wnd <> 0 then Shell_NotifyIcon(NIM_DELETE, @IconData);
end;
end.
Saludos