其实也不复杂,主要使用到shellAPI下的TNotifyIconData这个结构体:
typedef struct _NOTIFYICONDATA {
DWORD cbSize; //结构体的大小,以字节为单位
HWND hWnd; //窗口的句柄
UINT uID; //应用程序定义的任务栏图标的标识符
UINT uFlags; //此成员表明具体哪些其他成员为合法数据
UINT uCallbackMessage; //应用程序定义的消息标示
HICON hIcon; //增加、修改或删除的图标的句柄
TCHAR szTip[64]; //指向一个以/0结束的字符串的指针
DWORD dwState; //Version 5.0,图标的状态
DWORD dwStateMask; //Version 5.0. 指明dwState成员的那些位可以被设置或者访问
TCHAR szInfo[256]; //指向一个以/0结束的字符串的指针,字符串的内容为气球提示内容
union {
UINT uTimeout; //表示气球提示超时的时间,单位为毫秒,此时间后气球提示将消失
UINT uVersion; //用来设置使用Windows 95 还是 Windows 2000风格的图标消息接口
};
TCHAR szInfoTitle[64]; //指向一个以/0结束的字符串的指针。字符串的内容为气球提示的标题
DWORD dwInfoFlags; //设置此成员用来给气球提示框增加一个图标,增加的图标出现在气球提示标题的左侧
GUID guidItem; //保留
HICON hBalloonIcon; //用于Windows Vista或更高版本的自定义气球图标
} NOTIFYICONDATA, *PNOTIFYICONDATA;
具体怎么用,给个函数 ->
procedure FillDataStructureandCreate(shint:string;dwFlags:Cardinal);
begin
with FsysIcon do begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle;
uID:=Application.Icon.Handle;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP or NIF_INFO;
hIcon:=Application.Icon.Handle;
StrPCopy(szInfoTitle,'标题');
StrPCopy(szInfo,shint);//shint为内容
dwInfoFlags:=dwFlags;//提示的图标
uCallbackMessage:=CM_ICONDATA; //自定义的消息处理函数
uTimeout:=15;
uVersion:=NOTIFYICON_VERSION_4;
end;
end;
调用
首先得添加
FillDataStructureandCreate('右击重新显示窗体',NIIF_INFO);
Shell_NotifyIcon(NIM_ADD,@FsysIcon);
自定义提示
FillDataStructureandCreate('服务已启动',NIIF_INFO);
Shell_NotifyIcon(NIM_MODIFY,@FsysIcon);
最后用完删除
Shell_NotifyIcon(NIM_DELETE,@FsysIcon);
其中 FsysIcon是TNotifyIconData类型.