任务栏的图标可以冒出提示语,并有"X"可关掉,里面还可加链接!怎么弄的?
解决方案 »
- 主界面上的导航条,大家用什么控件呢?(delphi开发)
- 求一C/S程序
- 在delphi中如何用sendmessage发送wm_move消息
- RecordSet的Locktype属性
- 请问使用了 join 语句 后是不是不能在 DBGrid 上直接修改里面的数据内容??????????
- 错误提示:invalid pointer opertaion
- 如何对WINDOWS任务栏上当前运行程序的图标进行排序?
- 无意中发现一个问题
- 用SENDMESSAGE一窗口向另一窗口发送记录数据
- 有谁知道ExcelApplication怎样和Excel表相连接啊?
- delphi如何实现酒店管理系统房台图?
- 不同数据库更新表多个字段问题
http://download.csdn.net/source/1123364
uses Messages,Windows,ShellApi,Forms,SysUtils;
const
NIF_INFO = $10;
NIF_MESSAGE = 1;
NIF_ICON = 2;
NOTIFYICON_VERSION = 3;
NIF_TIP = 4;
NIM_SETVERSION = $00000004;
NIM_SETFOCUS = $00000003;
NIIF_INFO = $00000001;
NIIF_WARNING = $00000002;
NIIF_ERROR = $00000003; NIN_BALLOONSHOW = WM_USER + 2;
NIN_BALLOONHIDE = WM_USER + 3;
NIN_BALLOONTIMEOUT = WM_USER + 4;
NIN_BALLOONUSERCLICK = WM_USER + 5;
NIN_SELECT = WM_USER + 0;
NINF_KEY = $1;
NIN_KEYSELECT = NIN_SELECT or NINF_KEY; {other constants can be found in vs.net---vc7's dir: PlatformSDK\Include\ShellAPI.h} {define the callback message}
TRAY_CALLBACK = WM_USER + $7258; {new NotifyIconData structure definition}
type
PNewNotifyIconData = ^TNewNotifyIconData;
TDUMMYUNIONNAME = record
case Integer of
0: (uTimeout: UINT);
1: (uVersion: UINT);
end; TNewNotifyIconData = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
//Version 5.0 is 128 chars, old ver is 64 chars
szTip: array [0..127] of Char;
dwState: DWORD; //Version 5.0
dwStateMask: DWORD; //Version 5.0
szInfo: array [0..255] of Char; //Version 5.0
DUMMYUNIONNAME: TDUMMYUNIONNAME;
szInfoTitle: array [0..63] of Char; //Version 5.0
dwInfoFlags: DWORD; //Version 5.0
end;type
TBladder = Class(TObject) private
FTimeOut : Integer;
IconData : TNewNotifyIconData;
procedure SysTrayIconMsgHandler(var Msg: TMessage); message TRAY_CALLBACK;
function AddSysTrayIcon(const AHIcon : HWND):Boolean;
function DeleteSysTrayIcon:Boolean; public
constructor Create(const AHIcon : HWND;const ATimeOut : Integer);overload;
destructor Destroy;override; function ShowBalloonTips(const ATipTitle,ATipInfo : WideString):Boolean;
End;
implementation{ TBladder }Function TBladder.AddSysTrayIcon(const AHIcon : HWND) : Boolean;
begin
IconData.cbSize := SizeOf(IconData);
IconData.Wnd := AllocateHWnd(SysTrayIconMsgHandler);
{SysTrayIconMsgHandler is then callback message' handler}
IconData.uID := 0;
IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
IconData.uCallbackMessage := TRAY_CALLBACK; //user defined callback message
IconData.hIcon := AHIcon;//Application.Icon.Handle; //an Icon's Handle
IconData.szTip := 'TBladder.Title';
Result := Shell_NotifyIcon(NIM_ADD, @IconData);
end;constructor TBladder.Create(const AHIcon: HWND;const ATimeOut : Integer);
begin
AddSysTrayIcon(AHIcon);
FTimeOut := ATimeOut;
end;function TBladder.DeleteSysTrayIcon:Boolean;
begin
DeallocateHWnd(IconData.Wnd);
Result := Shell_NotifyIcon(NIM_DELETE, @IconData);
end;destructor TBladder.Destroy;
begin
DeleteSysTrayIcon;
inherited;
end;function TBladder.ShowBalloonTips(const ATipTitle, ATipInfo: WideString):Boolean;
begin
IconData.cbSize := SizeOf(IconData);
IconData.uFlags := NIF_INFO;
strPLCopy(IconData.szInfo, ATipInfo, SizeOf(IconData.szInfo) - 1);
IconData.DUMMYUNIONNAME.uTimeout := FTimeOut;//3000;
strPLCopy(IconData.szInfoTitle, ATipTitle, SizeOf(IconData.szInfoTitle) - 1);
IconData.dwInfoFlags := NIIF_INFO; //NIIF_ERROR; //NIIF_WARNING;
Shell_NotifyIcon(NIM_MODIFY, @IconData);
{in my testing, the following code has no use}
IconData.DUMMYUNIONNAME.uVersion := NOTIFYICON_VERSION;
Result := Shell_NotifyIcon(NIM_SETVERSION, @IconData);
end;procedure TBladder.SysTrayIconMsgHandler(var Msg: TMessage);
begin
case Msg.lParam of
WM_MOUSEMOVE:;
WM_LBUTTONDOWN:;
WM_LBUTTONUP:;
WM_LBUTTONDBLCLK:;
WM_RBUTTONDOWN:;
WM_RBUTTONUP:;
WM_RBUTTONDBLCLK:;
//followed by the new messages
NIN_BALLOONSHOW:;
{Sent when the balloon is shown}
NIN_BALLOONHIDE:;
{Sent when the balloon disappears?Rwhen the icon is deleted,
for example. This message is not sent if the balloon is dismissed because of
a timeout or mouse click by the user. }
NIN_BALLOONTIMEOUT:;
{Sent when the balloon is dismissed because of a timeout.}
NIN_BALLOONUSERCLICK:;
{Sent when the balloon is dismissed because the user clicked the mouse.
Note: in XP there's Close button on he balloon tips, when click the button,
send NIN_BALLOONTIMEOUT message actually.}
end;
end;end.
=======================================
最好不要用第三方控件
如果你想功能强大一点的汽泡提示功能,可以参考使用cooltrayicon
用现成的控件比较方便和可靠。
还有一些能在按钮或者LABEL上生成气泡提示的,代码在网上很多。