有些外部程序的托盘图标有好几种,
例如QQ,就有四个不同的托盘图标表示四种不同的状态.我的问题是,如何取得同一外部程序的所有的托盘图标并区分?例如: 根据QQ四个不同的托盘图标,四个不同的信息
if ... then
ShowMessage('QQ隐身中...")
.......
ShowMessage('QQ上线中...")
...........................
例如QQ,就有四个不同的托盘图标表示四种不同的状态.我的问题是,如何取得同一外部程序的所有的托盘图标并区分?例如: 根据QQ四个不同的托盘图标,四个不同的信息
if ... then
ShowMessage('QQ隐身中...")
.......
ShowMessage('QQ上线中...")
...........................
http://www.cndelphi.com/bbs/dispbbs.asp?boardID=49&ID=236&skin=0
两位没看清楚题目.不过ths anyway.
Uses
ShellAPI;Const
WM_NID = WM_USER + 1000;Var
Form1 : TForm1;
NotifyIcon : TNotifyIconData;
i : integer = 0;
Implementation{$R *.dfm}Procedure TForm1.FormCreate(Sender: TObject);
Begin
//NotifyIcon为全局变量,在程序的开头已经定义了
With NotifyIcon Do
Begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Handle; //指向当前窗体Form1的句柄
uID := 1;
uFlags := NIF_ICON Or NIF_MESSAGE Or NIF_TIP;
uCallBackMessage := WM_NID; //自定义消息
hIcon := Application.Icon.Handle;
szTip := 'aaaa';
End;
//把设置好的变量NotifyIcon加入到系统中以便处理
Shell_NotifyIcon(NIM_ADD, @NotifyIcon); }
End;Procedure TForm1.FormDestroy(Sender: TObject);
Begin
Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);
End;Procedure TForm1.Timer1Timer(Sender: TObject);
Begin
Case i Of
0:
Begin
Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);
With NotifyIcon Do
Begin
NotifyIcon.hIcon := Image1.Picture.Icon.Handle;
End;
Shell_NotifyIcon(NIM_ADD, @NotifyIcon);
i := 1;
End;
1:
Begin
Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);
With NotifyIcon Do
Begin
hIcon := Application.Icon.Handle;
End;
Shell_NotifyIcon(NIM_ADD, @NotifyIcon);
i := 0;
End;
End;
End;End.
其实托盘区的图标只有一个,就是hIcon指向的图标
改变图标是不是就是改变了这个句柄?并不是有好多句柄
1> cbSize就是你定义的NotifyIcon变量的大小,用SizeOf(TNotifyIconData)可以取得,如果你是一个熟练的C/C++程序员,你应该不会陌生。在C/C++中,每当要为一个结构体变量分配内存的时候都要:通过 SizeOf(Struct type) 来获知存放一个这样的结构体变量要多少内存。2>Wnd是一个句柄,你希望托盘程序产生的消息有哪个窗体来处理就让Wnd指向那个窗体。3>uID:如果你要创建多个托盘小程序,那么怎么区分它们呢?就是靠这个ID号来区分。4>uFlags是一个标志位,它表示当前所创建的托盘程序具有哪些性质:NIF_ICON 表示当前所设置的图标(即hIcon的值)是有效的 NIF_MESSAGE 表示当前所设置的系统消息(即uCallBackMessage的值)是有效的NIF_TIP 表示当前所设置的提示条(即szTip的值)是有效的。5> uCallBackMessage这是7个部分里面最重要的一个。这里指定一个回调消息,也就是说这里定义一个消息名,当你单击或者右击托盘图标的时候就会向你在Wnd所指向的窗体发送一个在uCallBackMessage中定义的消息名,然后你在程序中定义一个消息出来函数来处理这个消息。这样就把Windows关于消息的整套流程都处理好了。 6> hIcon为托盘图标的句柄,根据这个句柄你就可以增加、修改、删除图标。7> szTip就是当你的鼠标放到任务栏托盘的小图标上的时候弹出来的提示信息。
請查收Mail...........
myling(阿德)
的代码实现了此功能
好的.ths!
我也一直在找资料,可惜没人做过类似的.很不好搞阿.jackie168(玉面書生):
谢谢你的程序,也一起探讨吧.cmain83(龙行天下2008), FrameSniper(§坐拥书城铸内秀§) 都一起来吧.欢迎所有CSDN的朋友一起来!