delphi托盘的一个问题

nodedate: Tnotifyicondata;

ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(form1.Handle, SW_HIDE);
nodedate.cbSize := sizeof(tnotifyicondata);
nodedate.Wnd := handle;
nodedate.uID := 1;
nodedate.uFlags := Nif_Icon or Nif_Message or Nif_Tip;
nodedate.uCallbackMessage := wi_iconeven;
nodedate.hIcon := application.Icon.Handle;
nodedate.szTip := '托盘图标测试';
Shell_NotifyIcon(NIM_ADD,@nodedate);

那位大哥告诉我这是什么意思啊?
每句都要说,最好说说每个函数、过程以及nodedate.XXX是什么意思。
能再详细一点吗?还是不懂啊!
什么是回调消息?什么叫句柄?
有什么我是可以自行定义而不是托盘一定需要的呢?
以上问题基本解决。

假设我有一个图标叫1.ico,放在c:\下,我要怎么更换图标呢?最好能够不必使用文件地址改变图标。

兄弟一句一句解释还不如我分3部介绍3部分内容你就明白了!1个记录类型变量,2个API函数.
1,Tnotifyicondata 记录原体:
type
_NOTIFYICONDATAA = record
cbSize: DWORD; cbSize就是你定义的NotifyIcon变量的大小,用SizeOf(TNotifyIconData)可以取得,
Wnd: HWND; Wnd是一个句柄,你希望托盘程序产生的消息有哪个窗体来处理就让Wnd指向那个窗体.
uID: UINT; uID:如果你要创建多个托盘小程序,那么怎么区分它们呢?就是靠这个ID号来区分。
uFlags: UINT; uFlags是一个标志位,它表示当前所创建的托盘程序具有哪些性质.
NIF_ICON 表示当前所设置的图标(即hIcon的值)是有效的
NIF_MESSAGE 表示当前所设置的系统消息(即uCallBackMessage的值)是有效的
NIF_TIP 表示当前所设置的提示条(即szTip的值)是有效的
uCallbackMessage: UINT;uCallBackMessage这是7个部分里面最重要的一个。这里指定一个回调消息,也就是说这里定义一个消 息名,当你单击或者右击托盘图标的时候就会向你在Wnd所指向的窗体发送一个在uCallBackMessage 中定义的消息名,然后你在程序中定义一个消息出来函数来处理这个消息。这样就把Windows关于消 息的整套流程都处理好了。
hIcon: HICON; hIcon为托盘图标的句柄,根据这个句柄你就可以增加、修改、删除图标。
szTip: array [0..63] of AnsiChar; szTip就是当你的鼠标放到任务栏托盘的小图标上的时候弹出来的提示信息。
end;

2,ShowWindow
是一个API函数.函数功能:该函数设置指定窗口的显示状态。
参数:
nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。
SW_HIDE:隐藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。
SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。
SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。
SW_SHOWMAXIMIZED:激活窗口并将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其最小化。
SW_SHOWMINNOACTIVATE:窗口最小化,激活窗口仍然维持激活状态。
SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志
返回值:如果窗口以前可见,则返回值为非零。如果窗口以前被隐藏,则返回值为零。

3,Shell_NotifyIcon 系统托盘API函数
Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData);
dwMessage:[输入参数] 说明要执行的动作。动作的可选值如下:
NIM_ADD 增加一个图标到托盘区
NIM_DELETE 从托盘区删除一个图标
NIM_MODIFY 修改图标
NIM_SETFOCUS 将焦点(Focus)返回托盘区。这个消息通常在托盘区图标完成了用户界面下的操作后发出。比如一 个托盘图标显示了一个快捷菜单,然后用户按下ESC键了操作,这时使用NIM_SETFOCUS将焦点继续保 留在托盘区。该项仅在系统外壳与常用控制DLL( Shlwapi.dll与Comctl32.dll)5.0以上版本才可用
NIM_SETVERSION 指定使用特定版本的系统外壳与常用控制DLL。缺省值为0,表示使用Win95方式。该项在系统外壳 与常用控制DLL 5.0以上版本才可用。
lpdata:[输入参数] 一个指向NOTIFYICONDATA结构的指针
返回值:成功时函数返回TRUE,否则FALSE。
回调消息上面记录体解释已经解释了.
句柄:HANDLE这是一个中文翻译很古怪的字,我刚开始时一直不知道它是什么东东。刚开始学时总想知道一个HANDLE代表一个什么对象,现在我不去理解它是某对象,而就是理解为访问某一个对象的入口,事实上HANDLE大多数时候是一个整数索引(标志该对象在操作系统的某表中的位置,就好像一个数组的下标一样),Windows系统核心中主要是几张大表,这样一个整数索引就是标记目标在这个表中的位置,供操作系统访问时查询用。偶而它的确是指向某对象的指针,有时它还携带一些额外辅助信息。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-25
ShowWindow(Application.Handle, SW_HIDE);
隐藏程序
ShowWindow(form1.Handle, SW_HIDE);
隐藏窗体

nodedate.cbSize := sizeof(tnotifyicondata);
设置系统托盘需要的结构
nodedate.Wnd := handle;
nodedate.uID := 1;
nodedate.uFlags := Nif_Icon or Nif_Message or Nif_Tip;
nodedate.uCallbackMessage := wi_iconeven;
回调消息
nodedate.hIcon := application.Icon.Handle;
托盘显示的图标的句柄
nodedate.szTip := '托盘图标测试';
Shell_NotifyIcon(NIM_ADD,@nodedate);
添加托盘