
18.03.2013, 14:52
|
 |
Активный
|
|
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
|
|
Можно сделать намного легче. Прикрепил юнит, пользуйтесь на здоровье.
Код:
uses Tray;
...
var
TaskBarCreated : Boolean;
const
WM_TRAY = WM_USER + 1;
...
function WindowProc(Wnd: HWND; Msg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := 0;
case Msg of
WM_SYSCOMMAND:
begin
case LoWord(wParam) of
// При сворачивании программы
SC_MINIMIZE:
begin
TaskBarCreated := TaskBarAddIcon(Wnd, ID_ICON, WC.hIcon, WM_TRAY, 'Hello!');
ShowWindow(Wnd, SW_MINIMIZE);
ShowWindow(Wnd, SW_HIDE);
end;
// При восстановлении окна
SC_RESTORE:
begin
if TaskBarCreated then
begin
TaskBarDeleteIcon(Wnd, ID_ICON);
TaskBarCreated := False;
ShowWindow(Wnd, SW_SHOWNORMAL)
end
end;
end
end;
WM_TRAY:
begin
case LoWord(lParam) of
WM_LBUTTONDBLCLK:
begin
SetForegroundWindow(Wnd);
SendMessage(Wnd, WM_SYSCOMMAND, SC_RESTORE, 0);
end;
end
end;
WM_DESTROY:
begin
if TaskBarCreated then
TaskBarDeleteIcon(Wnd, ID_ICON);
PostQuitMessage(0);
Exit
end
end;
Result := DefWindowProc(Wnd, Msg, wParam, lParam)
end;
В юните есть еще функция для вывода хинта с области уведомления.
|