| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1016 人关注过本帖
标题:请教请教
只看楼主 加入收藏
dgh2007
Rank: 1
来 自:广东省东莞市
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-3-26
收藏
 问题点数:0 回复次数:2 
请教请教
我向大家请教一下在编程时如何在系统托盘图标上显示气泡提示。望大家赐教~~
搜索更多相关主题的帖子: 系统托盘 如何 
2008-04-01 09:39
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
收藏
得分:0 
正好以前研究过这个问题, 并且做了一个单独的类, 算你运气好!
用法如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
  a := TcTrayIcon.Create(Handle, 0);
  a.SetIcon(application.Icon.Handle);
  a.SetText('tip','title','info');
  a.ShowIcon;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Assigned(a) then
    a.HideIcon;
end;

// 下面是引用的文件
unit Unit2;
interface

uses windows,shellapi,sysutils;

type  NOTIFYICONDATAtc = record
    cbSize: DWORD;               // 结构本身大小
    Wnd: HWND;                   // 回调消息发送到的窗口句柄
    uID: UINT;                   // 图标识别号
    uFlags: UINT;                // 图标事件选择
    uCallbackMessage: UINT;      // 回调消息
    hIcon: HICON;                // 图标句柄
    szTip: array [0..127] of AnsiChar;  // 图标悬停消息
    dwState : DWORD;             // 托盘图标状态
    dwStateMask : DWORD;         // 状态掩码
    szInfo : array [0..255] of AnsiChar; // As String * 256 气球提示文本
    uTimeoutOrVersion : DWORD;   // 气球提示消失时间或版本
                                 // uTimeout - 气球提示消失时间(单位:ms, 10000 -- 30000)
                                 // uVersion - 版本(0 for V4, 3 for V5)
    szInfoTitle : array[0..63] of AnsiChar; // String * 64  ' 气球提示标题
    dwInfoFlags : DWORD;         // 气球提示图标
end;


type TcTrayIcon = class
    Private
        icon : NOTIFYICONDATAtc ;
        trayiconshow : boolean;
        iconok, txtok : boolean;
    Public
        Constructor Create(hwnd:Cardinal;msg:Cardinal);
        Destructor Destroy; override;
        procedure ShowIcon();
        procedure UpdateIcon();
        procedure HideIcon();
        procedure SetIcon(iconhandle:LongWord);
        procedure SetText(tip,title,info:String);
    Published
        property IsShow:Boolean read TrayIconShow;
end;


implementation

uses dialogs,variants;

Constructor TcTrayIcon.Create(hwnd:Cardinal;msg:Cardinal) ;
begin
    trayiconshow := false;
    iconok := false;
    txtok := false;

    with icon do
    begin
        cbSize:=SizeOf(icon); // 结构大小
        Wnd:=hwnd;   //发送图标消息到此窗口
        uID:=1;        //图标标记,多个图标以此区别
        uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP or $10; // 需要哪些信息
        uCallBackMessage := msg ; //自定义消息,当图标有事件时,将发送此消息和相关事件Lparam
//        hIcon:=Application.Icon.Handle; // 图标句柄
//        szInfo:='点击这里隐藏';
//        szInfoTitle:='点歌台';
        dwInfoFlags:=1; // 气球图标 0 1 2 3
//        uTimeoutOrVersion := makelparam( 10000,0); // 气球时间
    end;
end;

Destructor TcTrayIcon.Destroy;
begin
    if self.trayiconshow then
        self.HideIcon ;
end;

// 显示系统栏图标
procedure TcTrayIcon.ShowIcon();
begin
    if not iconok or not txtok then exit;

    Shell_NotifyIcon(NIM_ADD, @icon );
    trayiconshow:=true;
end;

// 修改系统栏图标
procedure TcTrayIcon.UpdateIcon();
begin
    if self.trayiconshow then
    begin
        Shell_NotifyIcon(NIM_MODIFY,@icon);
    end;
end;

// 清除系统栏图标
procedure TcTrayIcon.HideIcon();
begin
   Shell_NotifyIcon(NIM_DELETE,@icon);
   TrayIconShow:=false;
end;

procedure TcTrayIcon.SetIcon(iconhandle:LongWord);
begin
    icon.hIcon:=IconHandle; // 图标句柄
    iconok := true;
    self.UpdateIcon ;
end;

procedure TcTrayIcon.SetText(tip,title,info:String);
begin
    strPCOPY(icon.szTip,tip) ;
    strPCOPY(icon.szInfoTitle, title);
    strPCOPY(icon.szInfo,info);
    txtok := true;
    self.UpdateIcon ;
end;

end.
2008-04-01 15:39
dgh2007
Rank: 1
来 自:广东省东莞市
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-3-26
收藏
得分:0 
2楼的,我在这先谢了~~
2008-04-02 06:19
快速回复:请教请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019730 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved