В следующем тексте я буду ссылаться на номера шагов, упомянутые в вопросе:
Следующее решение без каких-либо дополнительных компонентов.Это очень просто реализовать.
Шаг # 1:
Просто используйте главный значок приложения (см. Следующий код).
Шаг# 2:
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
Shell_NotifyIcon(NIM_ADD, @TrayIconData);
Form1.Hide;
end;
Шаг № 3:
procedure TForm1.TrayMessage(var Msg: TMessage);
begin
if Msg.lParam = WM_LBUTTONDOWN then begin
Form1.Show;
Form1.WindowState := wsNormal;
Application.BringToFront;
Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
end;
end;
Шаг № 4:
procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
end;
Необходимый код в интерфейсной части:
uses
[...], ShellApi;
const
WM_ICONTRAY = WM_USER + 1;
type
TForm1 = class(TForm)
[...]
procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
end;
Единственная проблема: приложение может быть свернуто в systray только один раз.В следующий раз, когда вы захотите минимизировать это, ничего не произойдет.Почему?
Источник: delphi.about.com