在网上找到一些资料,记录下来:
1、在Uses 中 加入单元 ShellAPI
2、设置一个常量消息号,用于左键单击、双击或右键单击 例如: const WM_BarIcon=WM_User+200;
3、在程序主窗体的 Private 加入两个消息函数
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND; procedure WMBarIcon(var Message:TMessage);message WM_BARICON;4、两个程式的实现:
procedure TForm1.WMSysCommand(var Message: TMessage);var lpData:PNotifyIconData;begin if Message.WParam = SC_ICON then begin //如果用户最小化窗口则将窗口隐藏并在任务栏上添加图标 lpData := new(PNotifyIconDataA); lpData.cbSize := 88; lpData.Wnd := Form1.Handle;//注意这里用的是主窗体的 Handle lpData.hIcon := Application.Icon.Handle; //这里用的是应用程序的 Handle lpData.uCallbackMessage := WM_BARICON; lpData.uID :=0; lpData.szTip := 'Samples'; lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; Shell_NotifyIcon(NIM_ADD,lpData); ShowWindow(Application.Handle,SW_HIDE); Form1.Hide; dispose(lpData); end else inherited;end;
procedure TForm1.WMBarIcon(var Message: TMessage);var lpData:PNotifyIconData;
P : TPoint;begin if (Message.LParam = WM_LBUTTONDOWN) then begin //如果用户点击任务栏图标则将图标删除并回复窗口。 lpData := new(PNotifyIconDataA); lpData.cbSize := 88;//SizeOf(PNotifyIconDataA); lpData.Wnd := Form1.Handle; lpData.hIcon := Application.Icon.Handle; lpData.uCallbackMessage := WM_BARICON; lpData.uID :=0; lpData.szTip := 'Samples'; lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; Shell_NotifyIcon(NIM_DELETE,lpData); ShowWindow(Application.Handle,SW_Show); dispose(lpData); Form1.Visible := True; end;
if (Message.LParam = WM_RButtonDown) then begin GetCursorPos(P); PopupMenu1.Popup(P.X,P.Y); end;end;
