Код:
interface
uses
Windows,Messages;
function DelIcon(hWindow:HWND; ID:Cardinal):BOOL;
function AddIcon(hWindow:HWND; ID:Cardinal; ICON:hIcon;
CallbackMessage:Cardinal; Tip:PChar):BOOL;
const
NIM_ADD = $00000000;
NIM_DELETE = $00000002;
NIF_MESSAGE = $00000001;
NIF_ICON = $00000002;
NIF_TIP = $00000004;
type
TNotifyIconData = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: array [0..63] of Char;
end;
PNotifyIconData=^TNotifyIconData;
function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL; stdcall;
implementation
function Shell_NotifyIcon; external 'shell32.dll' name 'Shell_NotifyIconW';
function AddIcon(hWindow:HWND; ID:Cardinal; ICON:hIcon;
CallbackMessage:Cardinal; Tip:PChar):BOOL;
var
tmp:TNotifyIconData;
begin
FillChar(tmp, SizeOf(TNotifyIconData), 0);
with tmp do
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=hWindow;
uID:=ID;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage:=CallbackMessage;
hIcon:=ICON;
lstrcpyn(szTip, Tip, SizeOf(szTip));
end;
Result:=Shell_NotifyIcon(NIM_ADD,@tmp);// показываем иконку
end;
function DelIcon(hWindow:HWND; ID:Cardinal):BOOL;
var
tmp:TNotifyIconData;
begin
FillChar(tmp, SizeOf(TNotifyIconData), 0);
tmp.cbSize:=SizeOf(TNotifyIconData);
tmp.Wnd:=hWindow;
tmp.uID:=ID;
Result:=Shell_NotifyIcon(NIM_DELETE,@tmp);// убираем иконку
end;
function AddIcon(hWindow:HWND; ID:Cardinal; ICON:hIcon; CallbackMessage:Cardinal; Tip:PChar):BOOL;// добавить иконку
hWindow - окно, получающее сообщения от иконки
ID - ID иконки
ICON - сама иконка, полученая, например, LoadIcon(HInstance,'Icon_1')
CallbackMessage - идентификатор сообщения от иконки
Tip - всплывающая подсказка над иконкой
function DelIcon(hWindow:HWND; ID:Cardinal):BOOL;// удалить иконку
hWindow - окно, получающее сообщения от иконки
ID - ID иконки
скрыть окно программы
Код:
if AddIcon(Window,TRAY_ID_GLOBAL,
LoadIcon(HInstance,'Icon_1'),
TRAY_CLICK,TRAY_HINT) then
SetWindowPos(Window,0,0,0,0,0,
SWP_NOMOVE or SWP_NOSIZE or WP_HIDEWINDOW);
показать окно программы
Код:
if DelIcon(Window,TRAY_ID_GLOBAL) then
SetWindowPos(Window,0,0,0,0,0,SWP_NOMOVE or
SWP_NOSIZE or SWP_SHOWWINDOW);