托盘区图标问题大考验!!!只要解决了,我想对托盘区的理解也够透彻了!(50分)

  • 主题发起人 主题发起人 lsx_delphi
  • 开始时间 开始时间
L

lsx_delphi

Unregistered / Unconfirmed
GUEST, unregistred user!
1。如何知道在托盘区有那些程序?而且如何得到某个程序在哪里的图标?(假设
那个程序在托盘的图标和他的应用程序的图标不一样!)
2。
我还发现了另外一个问题,但我用我的代码来终止托盘区的其它程序时,程序是可以被我关闭,但是
它在托盘区的图标没有消失,非得鼠标移到上面时才消失,怪!
3。
我利用下面的这段代码只能在以经有的图标的后面插入我的图标,
我的目的是在我指定的中间的位置插入我的图标!
~~~~~~~~~!!!!
MyTrayIcon.cbSize := Sizeof(TNotifyIconDataA);
MyTrayIcon.Wnd := handle;
MyTrayIcon.uId := 0;
MyTrayIcon.uFlags := NIF_ICON OR NIF_TIP OR NIF_MESSAGE;
//MyTrayIcon.uCallbackMessage := WM_MYTRAYICONCALLBACK;
MyTrayIcon.hIcon := Application.Icon.Handle;
//MyTrayIcon.hIcon := CurrentIcon.Handle;
MyTrayIcon.szTip := '托盘示例程序';
if not Shell_NotifyIcon(NIM_ADD,@MyTrayIcon) then
ShowMessage('创建托盘图标失败!');

小弟出来咋到,分数才那么一点点,先给50分,的确不够再加。(大侠们不在乎这个把~v~呵呵)

 
对于第二个问题,我也碰到了,连续运行几次程序会留下好几个图标,
后来我响应主窗口的Close事件,在其中刷新一下Tray_wnd,
在需要关闭程序时Application.MainForm.Close;
问题得到解决。
 
Source Code:

var
TaskBarHandle: THandle;
begin
TaskBarHandle := FindWindow('Shell_TrayWnd',Nil);
ShowWindow(TaskBarHandle, SW_HIDE);
ShowWindow(TaskBarHandle, SW_SHOW);
end;
 
有个vc的源码,你去下载来研究研究吧
 
1.不能用close来刷新(因为是关闭其他程序的系统图标)
2.hhdelphi的方法试过了,不行
3.vc的代码看不懂555
没人来了?
 
lsx_delphi,vc那个例子确实是可以做到的啊,你找个会Vc的人问问那代码吧
 
2: Shell_NotifyIcon(NIM_DELERE,@MyTrayIcon) 就可以删掉图标了。
当然这个 MyTrayIcon 是个全局变量了,在任何时候都可以的
3: 有这个必要吗 ? 要知道 ICQ OICQ 都是这样的 先来后到的顺序嘛!
要实现起来不知道行不行,估计很难!
 
第二个问题,可能你在主窗口Close之前没有删除图表。
正如xlwang所说的没有Shell_NotifyIcon(NIM_DELERE,@MyTrayIcon)
也有可能在上述语句执行在Close之后,你要跟踪一下才知道。
这个错误我曾犯过。好象一定要在主窗口Close之前才行。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
451
import
I
I
回复
0
查看
629
import
I
I
回复
0
查看
730
import
I
后退
顶部