Hola
Bienvenido al club.
Hay muchos hilos que muestran como hacerlo, aqui hay un ejempo:
Coloca un PopupMeno en el form y revisa este codigo:
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);
procedure FormCreate(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;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
end.
Saludos