一段托盘程序的代码,程序退出后,托盘区的图标不能及时消失,大家来看看什么问题

vericky 2002-04-28 05:10:19
托盘区的图标不能及时消失,把鼠标放上去,托盘图标才消失。
//托盘源码
unit Utuopan;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus,shellapi;

const
WM_TRAYNOTIFY=2000;
MY_TRAY_ICON=1000;

type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N2: TMenuItem;
procedure N2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure OnMin(Sender: TObject);
procedure WMTrayNotify(var Msg : TMessage);Message WM_TRAYNOTIFY;
end;

var
form1: Tform1;
nid:TNOTIFYICONDATA;


implementation

{$R *.dfm}

procedure TForm1.N2Click(Sender: TObject);
begin
close;
end;



procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@nid);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMinimize:=OnMin;
end;

procedure Tform1.OnMin(Sender: TObject);
begin
nid.cbSize:=Sizeof(TNOTIFYICONDATA);
nid.Wnd:=Handle;
nid.uID:=MY_TRAY_ICON;
nid.uFlags:=NIF_TIP OR NIF_ICON OR NIF_MESSAGE;
nid.hIcon:=Application.Icon.Handle;
nid.szTip:='我的程序';
nid.uCallbackMessage:=WM_TRAYNOTIFY;
Shell_NotifyIcon(NIM_ADD,@nid);
ShowWindow(Application.Handle,SW_HIDE);
end;

procedure Tform1.WMTrayNotify(var Msg: TMessage);
var
p:TPoint;
begin
if Msg.LParam=WM_LBUTTONDBLCLK then
begin
nid.cbSize:=Sizeof(TNOTIFYICONDATA);
nid.Wnd:=Application.Handle;
nid.uID:=MY_TRAY_ICON;
nid.uFlags:=NIF_TIP OR NIF_ICON OR NIF_MESSAGE;
nid.uCallbackMessage:=WM_TRAYNOTIFY;
nid.szTip:='';
//Shell_NotifyIcon(NIM_ADD,@nid);
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end
else if Msg.LParam=WM_RBUTTONUP then
begin
GetCursorpos(p);
PopupMenu1.Popup (p.x,p.y);
end;
end;

end.

...全文
140 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vericky 2002-04-30
  • 打赏
  • 举报
回复
多谢 inbud(清风侠)
1nbud 2002-04-28
  • 打赏
  • 举报
回复
你的图标数据在运行过程中发生了变化
请看
nid.Wnd:=Handle
而在还原窗口是变成了
nid.Wnd:=Application.Handle;
改成一样的就可以了
vericky 2002-04-28
  • 打赏
  • 举报
回复
试试。
踢踏 2002-04-28
  • 打赏
  • 举报
回复
试试:
在FormCloseQuery事件中加入
//程序退出,任务栏图标仍然存在的问题的解决方法
Self.BorderIcons := Self.BorderIcons + [biMaximize];

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧