Delphi实现Windows的气泡提示样式

其实也不复杂,主要使用到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类型.

原文地址:https://www.cnblogs.com/Master-Qi/p/11114541.html