任务栏的图标可以冒出提示语,并有"X"可关掉,里面还可加链接!怎么弄的?

解决方案 »

  1.   

    这里可以下载,没有用到第3方控件:
    http://download.csdn.net/source/1123364
      

  2.   

    Delphi2007以后本身都带有气泡提示的托盘控件,不过我是用2007版的控件发现,每次运行,在系统栏都认为是一个新的图标。以前设置为“总是显示”或者“总是隐藏”就会失效。另外,2007版的控件,气泡无法自动消失。
      

  3.   

    第三方控件raize可以实现这个目的,里面有一个demo编译后运行就会有一个提示窗体,楼主可以参考。
      

  4.   

    unit uBladder;interface
      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.
    =======================================
    最好不要用第三方控件
      

  5.   

    我一直在用BusinessSkin的皮肤,它也有TRAYICON功能。
    如果你想功能强大一点的汽泡提示功能,可以参考使用cooltrayicon
    用现成的控件比较方便和可靠。
    还有一些能在按钮或者LABEL上生成气泡提示的,代码在网上很多。