Как принять событие от иконки в области уведомлений для безоконной программы?
Я могу сделать кликабельную иконку для своего оконного приложения:
unit Unit1;
interface
uses
Windows,Messages,Forms,ShellApi,Dialogs;
type
TForm1=class(TForm)
procedure IconMouse(var Msg:TMessage);message WM_USER+1;
procedure FormCreate(Sender:TObject);
end;
var
Form1:TForm1;
implementation
{$R *.dfm}
procedure TForm1.IconMouse(var Msg:TMessage);
begin
case Msg.LParam of
WM_LBUTTONUP:
ShowMessage('Hi');
end;
end;
procedure TForm1.FormCreate(Sender:TObject);
var Nim:TNotifyIconData;
begin
with Nim do
begin
cbSize:=System.SizeOf(Nim);
Wnd:=Form1.Handle;
hicon:=Application.Icon.Handle;
uID:=0;
uFlags:=NIF_ICON or NIF_MESSAGE;
uCallbackMessage:=WM_USER+1;
end;
Shell_NotifyIcon(NIM_ADD,@Nim);
end;
end.
Но можно ли как-то сделать тоже самое, только для простой программы?
program Project1
begin
end.
Следуя аналогии, иконку создать получается, а вот как принять от неё сообщение -- не знаю.
program MyProgAaa1;
{$R *.res}
uses
Windows,Messages,ShellApi,Dialogs,
Forms;
procedure IconMouse(var Msg:TMessage);
begin
case Msg.LParam of
WM_LBUTTONUP:
ShowMessage('Hi!');
end;
end;
var Nim:TNotifyIconData;
begin
with Nim do
begin
cbSize:=System.SizeOf(Nim);
Wnd:=Application.Handle;
hicon:=Application.Icon.Handle;
uID:=0;
uFlags:=NIF_ICON or NIF_MESSAGE;
uCallbackMessage:=WM_USER+1;
end;
Shell_NotifyIcon(NIM_ADD,@Nim);
while True do
//как сделать "PeekMessage" для IconMouse()?
end.
Ответы (1 шт):
Автор решения: Lem0nti
→ Ссылка
Варианты следующие:
- Сделать невидимой главную (или любую) форму и в OnCreate также добавить Application.ShowMainForm:=false;
- Создать датамодуль и на него положить TTrayIcon.