delphi 启动后直接托盘的操作

举报
走在那条路上 发表于 2023/12/11 17:23:03 2023/12/11
【摘要】 君子性非异也,善假于物也...利用TNotifyIconData来实现最小化托盘,以及利用WndProc来实现双击图标时最大化1、引用单元文件:Winapi.ShellAPI,首先声明一个对象:TrayIconData: TNotifyIconData;2、窗体OnCreate事件:procedure TForm1.FormCreate(Sender: TObject);begin Tra...

君子性非异也,善假于物也...

利用TNotifyIconData来实现最小化托盘,以及利用WndProc来实现双击图标时最大化

1、引用单元文件:Winapi.ShellAPI,首先声明一个对象:

TrayIconData: TNotifyIconData;

2、窗体OnCreate事件:

procedure TForm1.FormCreate(Sender: TObject);
begin
  TrayIconData.cbSize := SizeOf(TNotifyIconData);
  TrayIconData.Wnd := Self.Handle;//窗体的句柄
  TrayIconData.uID := 1;
  TrayIconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
  TrayIconData.uCallbackMessage := WM_USER + 1;//自定义的消息号
  TrayIconData.hIcon := Application.Icon.Handle;//应用程序的图标
  StrPCopy(TrayIconData.szTip, '鼠标指向图标时的提示信息,如:Test.exe');
  Shell_NotifyIcon(NIM_ADD, @TrayIconData);
  WindowState := wsMinimized;
  Application.OnMinimize := MinimizeToTray;//关联应用程序的最小化事件
end;

3、MinimizeToTray代码段:

procedure TForm1.MinimizeToTray(Sender: TObject);
begin
  if WindowState = wsMinimized then
  begin
    Hide();//窗体隐藏
    TrayIconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    TrayIconData.uCallbackMessage := WM_USER + 1;//回调消息
    TrayIconData.hIcon := Application.Icon.Handle;
    StrPCopy(TrayIconData.szTip, 'Test.exe');
    Shell_NotifyIcon(NIM_MODIFY, @TrayIconData);
  end;
end;

4、WndProc代码段:

声明:
procedure WndProc(var Message: TMessage);override;//一定要写上override
实现:
procedure TForm1.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_USER + 1 then
  begin
    if (Message.LParam = WM_LBUTTONDBLCLK) then
    begin
      Show();
      WindowState := wsMaximized;
      TrayIconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
      TrayIconData.uCallbackMessage := WM_USER + 1;
      TrayIconData.hIcon := Application.Icon.Handle;
      StrPCopy(TrayIconData.szTip, 'Test.exe');
      Shell_NotifyIcon(NIM_MODIFY, @TrayIconData);
    end;
  end;
  inherited WndProc(Message);//继续循环Windows消息
end;

5、窗体的Destory,移除托盘及图标:

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
end;
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。