uses ShellAPI;
const
WM_BARICON=WM_USER+200;
sc_DragMove:longint=$F012;
WM_ACTIVE_CLIENT = WM_USER + 1000;
public
procedure message WM_SYSCOMMAND;
proceduremessage WM_BARICON;
procedure
var
begin
if Message.WParam = SC_CLOSE then //关闭窗口
begin
Client.Close;
exit;
end;
if Message.WParam = SC_ICON then //最小化到托盘区
begin
//如果用户最小化窗口则将窗口隐藏并在任务栏上添加图标
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
// SizeOf(PNotifyIconDataA);
lpData.Wnd := Client.Handle;
lpData.hIcon := application.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := '紫金软件';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
Client.Visible := False;
end
else
begin
//如果是其它的SystemCommand消息则调用系统缺省处理函数处理之。
DefWindowProc(Handle,Message.Msg,Message.WParam,Message.LParam);
end;
end;
var
begin
//if (Message.LParam = WM_RBUTTONDOWN) then //鼠标右键
if (Message.LParam = WM_LBUTTONDOWN) then
begin
//如果用户点击任务栏图标则将图标删除并回复窗口。
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
lpData.Wnd := Client.Handle;
lpData.hIcon := application.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := '紫金软件';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
Client.Visible := True;
end;
end;
请发表评论