建立一个工程,添加一个弹出菜单,与窗体连接起来。
然后自定义一条消息
const WM_MYMESSAGE=WM_USER+100;
实现原理是利用tnotifyicondata类型,它需要引用ShellAPI于uses中。
procedure InstallIcon(mes , flage:uint);
var st:tnotifyicondata;
begin
st.cbSize :=sizeof(st);
st.Wnd :=form1.Handle ;
st.uID :=1;
st.uFlags :=flage;
if mes=NIM_ADD then
begin
st.uFlags :=NIF_MESSAGE OR NIF_TIP OR NIF_ICON;
st.szTip :='this is a sample';
st.uCallbackMessage :=WM_MYMESSAGE;
st.hIcon :=form1.Icon.Handle ;
end;
shell_notifyicon(mes,@st);
end;
该过程初始化TnotifyIconData对象,将自定义消息WM_MYMESSAGE与之相连。
当你关闭该窗体时就会产生事件
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=canone;
form1.Hide ;
installIcon(NIM_ADD,0);
end;
在托盘区就会出现相应的图标,当然这也需要你在TForm中制定。
当右键点击该图标时,将触发消息处理函数(这也是自定义的与WM_MYMESSAGE呼应)
procedure tform1.MYCLICK(var message:tmessage);
var pst:tpoint;
begin
if (message.Lparam=WM_RBUTTONDOWN)then
begin
getcursorpos(pst);
form1.PopupMenu1.Popup(pst.X,pst.Y);
end;
end;
它的定义是 procedure MYCLICK(var message:Tmessage);message WM_MYMESSAGE;
这样右键菜单就会谈出来了。