Розміщуємо іконку в tray і використовуємо її, клуб для програмістів

І так задача номер 1, при запуску Вашої програми, в треї (це біля годинок), з'являється іконка, після закриття іконка відповідно зникає. Для цього в блок Uses додаємо модуль ShellAPI

Потім визначаємо наступну константу і змінну:

const MyTrayIcon = WM_USER + 1;
var NID: TNotifyIconData;

Далі клацнувши два рази за формою, потрапляємо в зумовлену процедуру TForm1.FormCreate, і прописуємо там наступний код:

with NID do
begin
cbSize: = SizeOf (TNotifyIconData);
Wnd: = Handle;
uId: = 1;
uFlags: = NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage: = MyTrayIcon;
hIcon: = Application.Icon.Handle;
szTip: = 'Спливаюча підказка. ';
end;
Shell_NotifyIcon (NIM_ADD, @NID);

Це весь текст необхідний для того, що б при створенні форми, в треї з'явилася іконка. Тепер залишилося вказати, що при закритті програми, іконку треба прибрати. Якщо цього не зробити, то іконка залишиться, до тих пір поки ви не наведете на неї мишку, після цього зникне. Думаю, Ви неодноразово стикалися з такою помилкою в деяких програмах. Тому що б не уподібнюватися, що не акуратним програмістам, в процедурі закриття форми, вказуємо всього один рядок:

Shell_NotifyIcon (NIM_DELETE, @NID); // ВИДАЛИТИ ПІКТОГРАМА з трея

Звичайно, від того що в треї буде Ваш значок, жодного толку. Тому завдання номер 2, робота з цим самим треєм.
Пропоную при натисканні, правою кнопкою на цьому значку, зробити спливаюче меню, що-б все було як у дорослих :). Для цього треба створити цей самий меню. На форму витягуємо компонент PopupMenu з закладки Standard. Після чого два рази натискаємо по меню, і отримуємо це саме меню. На якому натискаємо правою кнопкою, вибираємо Insert, і наше меню зростає, до потрібної кількості пунктів, ну а в "інспектор об'єктів", прописуємо назву цих пунктів, іконки якщо хочете, і звичайно по подвійному кліку, отримуємо процедуру, яка буде виконуватися для цього пункту меню. Пропоную створити там пункт "Показати додаток", а в процедурі прописати Visible: = true; тому на сомой формі розмістимо кнопку "Сховати", дія якої буде Visible: = false; Обов'язково збережіть проект, тому що заховане додаток, може не вийти закрити, хіба що разом з Делфі.
Створюємо процедуру, обробки:

// ОБРОБКА МИШІ в треї
procedure TForm1.TrIcon (var a: TMessage);
var P: TPoint;
begin
case a.lParam of
WM_LBUTTONDBLCLK:
begin
SetForegroundWindow (Handle);
end;
WM_RBUTTONDOWN:
begin
GetCursorPos (P);
PopupMenu1.Popup (P.X, P.Y);
end;
end;
end;

І реєструємо її в наступним рядком:

procedure TrIcon (var a: TMessage); message MyTrayIcon;

Ось ніби і все. Тепер при запуску програми і натисненні на формі кнопки "Сховати", додаток ставати невидимим, а при правому кліку, на іконці в треї, вибираємо пункт "Показати додаток" і воно знову з'являється.

Схожі статті