Delphi笔记-在任务栏通知区中加图标

来源:互联网 发布:睢阳保卫战知乎 编辑:程序博客网 时间:2024/05/16 07:35

Delphi笔记-在任务栏通知区中加图标

1.实现该功能要用到Shell_NotifyIconA()函数,它在ShellAPI单元中定义,
  所以要先用uses语句将其包含进去。

2.定义全局常量:
  const
    TrayIconMsg=wm_user+1;//自定义消息常量,当右击任务栏通知区图标时触发的消息的处理函数由该常量来指点定
    iid:=100;//好像没什么用处

3.在窗体类中的private部分中定义自已的消息处理函数
  procedure TrayIconMessage(var message:TMessage);message TrayIconMsg;//两个分号之间的字段表示该消息处理函数的触发是由TrayIconMsg常量来指定的
 
4.实现消息处理函数:
procedure TForm1.TrayIconMessage(var message:TMessage);//注意,在实现部分不用加上message TrayIconMsg
var MsgOutPos:TPoint;//用来存放右击事件发生时,鼠标的位置
begin
  inherited;//进行默认处理
  if(message.lParam=wm_rButtonUp)then //表示按下右键后放开,就执行以下任务
  begin
    GetCursorPos(MsgOutPos);//取得鼠标的位置
    PopupMenu1.Popup(MsgOutPos.x,MsgOutPos.y);//弹出右键菜单
  end;
  message.Result:=0;//不知有什么用
end;

5.在窗体类的public部分中加入一个成员变量:
  TrayIcon:TNotifyIconDataA;

6.实现在任务栏通知区中加入图标:
procedure TForm1.Button1Click(Sender:TObject);
begin
  TrayIcon.cbSize:=sizeof(TNotifyIconDataA);//TrayIcon是TNotifyIconDataA记录类型,cbSize是该记录的长度
  TrayIcon.Wnd:=Form1.Handle;//Wnd指向的是要调用Shell_NotifyIconA()函数的窗口的Handle
  TrayIcon.uID:=iid;//应用程序所定义的任务栏通知区图标的标识符
  TrayIcon.uFlags:=NIF_ICON+NIF_TIP+NIF_MESSAGE;//uFlags指定该记录中哪些项目有效,若有NIF_ICON则hIcon有效,若有NIF_TIP则szTip有效,若有NIF_MESSAGE则uCallbackMessage有效
  TrayIcon.uCallbackMessage:=TrayIconMsg;//uCallbackMessage指定将触发的消息送给哪个消息处理函数
  TrayIcon.hIcon:=Application.Icon.Handle;//hIcon指定放在任务栏通知区中的图标是什么
  TrayIcon.szTip:='右击打开快捷菜单';//szTip指定当鼠标停留在任务栏通知区中的图标上时出现的提示是什么
  Shell_NotifyIconA(NIM_ADD,@TrayIcon);//调用该函数将会在任务栏通知区中放入图标,第一个参数有3个值:NIM_ADD,表示增加图标;NIM_MODIFY,表示修改已有的图标;NIM_DELETE,表示删除图标
end;  

原创粉丝点击