我的一个用到托盘图标的程序,有时退出时,Icon也不消失 ( 积分: 100 )

  • 主题发起人 主题发起人 bobby_ym
  • 开始时间 开始时间
其实用cooltrayicon这个控件不错啊!

自己写的话因为已经在系统注册了托盘,退出的时候先释放,然后给托盘区域发送一个刷新消息就搞定了
 
给托盘区域发送一个刷新消息?
能否给个示例?
 
寻觅高手,高高手
 
真的没有高手肯赐教吗?
[:D][:(][:(!]
 
大富翁里的高手,请出来解决一下?
 
高手呢? 是不是问题太难了?
 
procedure TfrmNotifyIcon.AddIcon;
begin
with FIconData do
begin
cbSize := SizeOf(FIconData);
Wnd := Self.Handle;
uID := $DEDB;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon := Application.Icon.Handle;
uCallbackMessage := WM_NotifyIcon;
StrCopy(szTip, '托盘示例');
end;
Shell_NotifyIcon(NIM_Add, @FIconData);
end;

procedure TfrmNotifyIcon.AppMin;
begin
Application.MainForm.Hide;
//ShowWindow(Application.handle,SW_Hide);
end;

procedure TfrmNotifyIcon.DelIcon;
begin
Shell_NotifyIcon(NIM_Delete, @FIconData);
end;

procedure TfrmNotifyIcon.WndProc(var msg: TMessage);
var
pt: TPoint;
begin
inherited WndProc(msg);
case msg.Msg of
WM_NotifyIcon:
case msg.LParam of
WM_RBUTTONUP:
begin
if IsWindowVisible(Handle) then
Application.BringToFront
else begin
//SetForegroundWindow(Application.Handle);
GetCursorPos(pt);
//PpMenu.Popup(pt.x, pt.y);
end;
end;
WM_LBUTTONDBLCLK:
begin
Application.NormalizeTopMosts;
Application.Restore;
Application.BringToFront;
//ShowWindow(Application.Handle, SW_RESTORE);
//SetForegroundWindow(Application.Handle);
end;
end;
WM_CREATE: AddIcon;
WM_DESTROY: DelIcon;
WM_SYSCOMMAND: if msg.WParam = SC_MINIMIZE then AppMin;
end;
end;
 
创建托盘的句柄和 删除托盘的句柄不一致导致的
 
Shell_NotifyIcon(NIM_DELETE,@lpData);
用这句。。
我就是这样用的。。
 
写到FormClose事件里面
 
感谢lijun_snut 同志:

lijun_snut同志是个好同志, 他是个真正的高手!!!!(个人观点,哈哈)

问题所在的确是 创建托盘的句柄和 删除托盘的句柄不一致导致的
 
接受答案了.
 
后退
顶部