Delphi 最小化托盘

2009-07-16 11:30

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;

原文地址:https://www.cnblogs.com/beeone/p/1846932.html