帮忙解释一段代码,关于托盘图标的(50分)

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

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是关于修改托盘图标的一段代码,不明白啥意思,帮忙给加上注释吧
procedure TForm1.ModifyTrayIcon(Action: DWORD);
var
NIData: TNotifyIconData;
begin
with NIData do
begin
cbSize := sizeof(TNotifyIconData);
UID := 0;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP
//尤其是这里
Wnd := Handle;
uCallBackMessage := WM_TRAYICON;
HICON := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(Action, @NIData);
end;

procedure TForm1.WMTrayIcon(var message: TMessage);
var
MousePos: TPoint;
begin
if message.LPARAM = WM_RBUTTONDOWN then
begin
SetActiveWindow(Handle);
GetCursorPos(MousePos);
PopupMenu.Popup(MousePos.X, MousePos.Y);
end;
end;
 
表示其它字段的有效性!

uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP

表示在 uCallBackMessage, HICON 和szTip 中的设置内容都是有效的。
 
我倒,就一句啊,我还有好几个地方不明白
:(
procedure TForm1.ModifyTrayIcon(Action: DWORD);
var
NIData: TNotifyIconData;
begin
with NIData do
begin
cbSize := sizeof(TNotifyIconData)
//sizeof是求长度?
UID := 0
//uid干吗=0?
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP
//后面的NIF_*是啥意思?
Wnd := Handle
//handle有什么用,好几个地方都用到了
uCallBackMessage := WM_TRAYICON
//WM_TRAYICON不明白
HICON := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(Action, @NIData)
//这里
end;

procedure TForm1.WMTrayIcon(var message: TMessage);
var
MousePos: TPoint;
begin
if message.LPARAM = WM_RBUTTONDOWN then //WM_RBUTTONDOWN ?
begin
SetActiveWindow(Handle);
GetCursorPos(MousePos);
PopupMenu.Popup(MousePos.X, MousePos.Y);
end;
end;
 
procedure TForm1.ModifyTrayIcon(Action: DWORD);
var
NIData: TNotifyIconData
//封装了NOTIFYICONDATA 结构
begin
with NIData do
begin
cbSize := sizeof(TNotifyIconData)
//cbSize保存NotifyIconData的大小
UID := 0;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP

//NIF_MESSAGE表示结构中的回调消息uCallBackMessage是有效的
//NIF_ICON表HICON成员的值有效
//NIF_TIP表示弹出示提示szTip有效
//所谓有效是指Shell_NotifyIcon会处理对应成员变量的值,在这里的结果是
//会在托盘中出现图标,点击该图标会产生WM_TRAYICON消息,指向该图示会
//会有一个弹出提示,内容为Application.Title
Wnd := Handle;
uCallBackMessage := WM_TRAYICON;
HICON := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(Action, @NIData);
end;

procedure TForm1.WMTrayIcon(var message: TMessage);
//这是一个响应WM_TRAYICON的过程,检测到在托盘图标上点鼠标右键时将本窗口激活并
//弹出一个快捷菜单
var
MousePos: TPoint;
begin
if message.LPARAM = WM_RBUTTONDOWN then
begin
SetActiveWindow(Handle);
GetCursorPos(MousePos);
PopupMenu.Popup(MousePos.X, MousePos.Y);
end;
end;
 
免费学习先
 
另,Handle即是当前这个窗口的Handle(句柄),表示将WM_TRAYICON的消息发送到这个窗口(Handle)
 
hawkxy已经说完啦
 
接受答案了.
 
后退
顶部