`
dadaozei
  • 浏览: 13418 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

一个DELPHI下的气泡提示控件

阅读更多

unit PPTip;

interface

uses
  SysUtils, Windows, Messages,  Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,CommCtrl,ExtCtrls;

type
  TPPTip = class(TComponent)
  private
    timer : TTimer;  //显示延时器
    FlashTimer:TTimer;
    AControl:TWinControl;
    FlashShape:TShape;
    fTipHandle: HWND;//泡泡提示窗口句柄
  protected
    FInterval:Integer; //延时毫秒数
    ColorTag : Integer; //颜色开关
    procedure setFInterval(AInterval:Integer);
    procedure CloseTip(Sender:TObject);
    procedure onFlashTimer(Sender:TObject);
  public
    constructor Create(Owener:TComponent);override;
    destructor Destroy;override;
    procedure PopTip(sText: string;AOwner: TWinControl;nIcon: Integer=0;
              timeout: Integer = 5;sTitle: string = '');
  published
    property Interval:Integer read FInterval write setFInterval;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TPPTip]);
end;

procedure TPPTip.PopTip(
  sText: string; //   提示框文本
  AOwner: TWinControl; //   提示框坐标
  nIcon: Integer = 0; //   提示框图标 0: 默认  1: 提示  2: 感叹号  3: 错误
  timeout: Integer = 5; //提示框消失时间
  sTitle: string = ''); //提示框标题   默认为application.title
const
  TTS_BALLOON = $0040; //ToolTip提示窗口的外形,指定为气球型
  TTS_CLOSE = $0080;
    //关闭按钮(仅XP及以上版本弄够支持)   (PS:郁闷 , 我的电脑上怎么就不出现这个按钮呢?)
  TTF_PARSELINKS = $1000; //可使用超链接
  TTM_SETTITLE = WM_USER + 32; //设置提示标题信息的消息
var
  i: Integer;
  ftoolInfo: tagToolInfoA;
  str: string;
  vPoint: TPoint;
  buffer:array[0..25] of char;
begin
  if fTipHandle <> 0 then
  begin
     DestroyWindow(fTipHandle)
  end;
  fTipHandle := CreateWindow(TOOLTIPS_CLASS, nil,
  WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP or TTS_CLOSE,
  0, 0, 0, 0, Application.Handle,
  0, HInstance, nil);
  if fTipHandle = 0 then Exit;

  fToolInfo.cbSize := SizeOf(fToolInfo); //设置ToolInfo的大小
  fToolInfo.uFlags := TTF_PARSELINKS or TTF_IDISHWND or TTF_TRACK; //设置基本风格
  fToolInfo.uId := Application.Handle; //设置所有者的句柄
  fToolInfo.lpszText := PAnsiChar(sText); //设置标题信息

  //向气泡窗体发送消息,将ToolInfo的信息设置到气泡窗体中

  FillChar(buffer,SizeOf(buffer),#0);
  lstrcpy(buffer,'错误');
  SendMessage(fTipHandle, $0400 + 32, nIcon, Integer(@buffer));
  SendMessage(fTipHandle, TTM_ADDTOOL, 0, Integer(@fToolInfo));
  SendMessage(fTipHandle, TTM_SETTOOLINFO, 0, Integer(@fToolInfo));
  SendMessage(fTipHandle, TTM_SETTIPBKCOLOR, clWhite, 0);  //设置背景色
  SendMessage(fTipHandle, TTM_SETTIPTEXTCOLOR, clGreen , 0);  //设置字体颜色
  //设置气泡窗体的提示图标和标题信息 ,{图标消息发送不成功.不知道应该是哪个消息}
  str := sTitle;
  if str = '' then str := Application.Title;
  SendMessage(fTipHandle, TTM_SETTITLE, 1, Integer(str));

  //下面这两个初值要设置,害死人呢.ClientToScreen得到的坐标相当不准.
  vPoint.X :=0;
  vPoint.Y := 0;
  windows.ClientToScreen(AOwner.Handle, vPoint);
  vPoint.X := vPoint.X + AOwner.Width div 2 ;
  vPoint.Y := vPoint.Y + AOwner.Height div 2  ;
  SendMessage(fTipHandle, TTM_TRACKPOSITION, 0, MAKELONG(vPoint.x, vPoint.y));
  //激活气泡窗体,并显示出来
  PostMessage(fTipHandle, TTM_TRACKACTIVATE, Integer(True),Integer(@fToolInfo));
  Application.ProcessMessages;
  //光标跳转
  if AOwner.CanFocus then AOwner.SetFocus;
  //计时开始
  timer.Enabled := True;
  AControl := AOwner;
  FlashTimer.Enabled := True;
end;


procedure TPPTip.CloseTip(Sender: TObject);
begin
  timer.Enabled := false;
  FlashTimer.Enabled := False;
  FlashShape.Hide;
  DestroyWindow(fTipHandle);
end;

constructor TPPTip.Create(Owener:TComponent);
begin
  inherited Create(Owener);
  timer := TTimer.Create(Self);
  FlashTimer := TTimer.Create(self);
  FlashShape := TShape.Create(self);
  FlashShape.Brush.Style := bsClear;
  Interval := 2000;
  timer.Interval := Interval;
  timer.Enabled := False;
  timer.OnTimer := CloseTip;

  FlashTimer.Interval := 100;
  FlashTimer.Enabled := False;
  FlashTimer.OnTimer := onFlashTimer;
end;

procedure TPPTip.setFInterval(AInterval: Integer);
begin
  if AInterval < 100 then
    AInterval := 30000;
  FInterval := AInterval;
  timer.Interval := FInterval;
end;

procedure TPPTip.onFlashTimer(Sender: TObject);
var
  vPoint:TPoint;
begin
  if Assigned(AControl) then
  begin
    ClientToScreen(Acontrol.Handle, vPoint);
    FlashShape.left:= Acontrol.Left-1;
    FlashShape.Top := Acontrol.top-1;
    FlashShape.Width := AControl.Width+2;
    FlashShape.Height := AControl.Height+2;
    if ColorTag = 1 then
    begin
      FlashShape.Pen.Color := clRed;
      FlashShape.Pen.Style := psDot;
      ColorTag:=0;
    end
    else
    begin
      FlashShape.Pen.Color := clWhite;
      FlashShape.Pen.Style := psDot ;
      ColorTag := 1;
    end;
    FlashShape.Parent := AControl.Parent;
    FlashShape.BringToFront;
    FlashShape.Show;
    FlashShape.Repaint;
  end;
end;

destructor TPPTip.Destroy;
begin
  if fTipHandle <> 0 then
  begin
     DestroyWindow(fTipHandle)
  end;
  inherited;
end;

end.

 

 

  • 大小: 13.7 KB
分享到:
评论

相关推荐

    delphi 6 气泡提示 hTrayIcon 控件

    2. **Hint**: 提供了气泡提示的文字内容,当鼠标悬停在托盘图标上时,这个提示会显示出来。 3. **Visible**: 控制托盘图标的可见性,如果设为`True`,则图标会在系统托盘区显示。 4. **OnClick**: 当用户点击托盘...

    Dephi\Delphi气泡提示的实现

    实现Delphi气泡提示的过程中,理解并熟练运用以上知识点是至关重要的。通过合理的配置和定制,可以创造出既美观又实用的用户交互体验,提升应用程序的易用性。同时,不断学习和探索Delphi的VCL框架,将有助于你更好...

    Delphi气泡提示源码例子.rar

    总之,"Delphi气泡提示源码例子"为我们提供了一个实践和学习Delphi界面编程的好机会,特别是对自定义控件和图形操作感兴趣的开发者。通过分析和改进这个源码,我们可以进一步提高自己的Delphi编程技能,同时也能为...

    Delphi气泡提示的示例代码..rar

    在Delphi编程环境中,气泡提示(Bubble Hint)是一种常见的用户界面元素,它可以在鼠标悬停在特定控件上时显示一些简短的信息,帮助用户理解控件的功能或提供额外的上下文信息。本示例代码将展示如何在Delphi应用中...

    delphi 两种气泡实现方式

    在Delphi编程环境中,气泡提示(Bubble Hint)是一种常见的用户界面元素,它可以在鼠标悬停在特定控件上时显示额外的信息。本教程将深入探讨两种不同的方法来实现Delphi中的气泡提示功能。 方法一:使用...

    Delphi气泡提示的实现.rar

    总的来说,"Delphi气泡提示的实现.rar"这个资源包可能包含了创建和自定义气泡提示的代码示例和视觉参考,对想要在Delphi项目中实现这一功能的开发者来说是很有价值的。通过学习和理解这些内容,你可以更好地为你的...

    Delphi 气泡弹出源码

    "Delphi 气泡弹出源码"是一个关于在Delphi中实现气泡提示功能的代码示例。气泡提示通常用于提供用户界面(UI)中的临时信息或指导,它们会在鼠标悬停在特定控件上时短暂出现,然后自动消失。 在Delphi中实现气泡...

    delphi实现QQ气泡窗体

    通过以上步骤,我们可以实现一个具备QQ气泡提示功能的Delphi应用程序。不过,实际开发过程中,可能还需要根据具体需求进行调整,如添加自定义图标、文字样式、气泡颜色等。Delphi的强大之处在于其丰富的库支持和灵活...

    Delphi7.0托盘控件CoolTrayIcon

    3. **通知消息**:当程序需要向用户发送提示信息时,CoolTrayIcon可以通过ShowBalloonTip方法显示气泡提示,包含标题、消息内容以及图标类型,增强了用户体验。 4. **隐藏与恢复窗口**:通过CoolTrayIcon,开发者...

    气泡式控件

    气泡控件是一种在用户界面上广泛应用的交互元素,它通常用于显示临时提示信息或指示器,具有轻量级、非侵入性等特点。在编程领域,尤其是开发桌面应用程序时,Delphi这样的集成开发环境(IDE)提供了创建和管理气泡...

    delphi 系统区托盘控件

    总的来说,CoolTrayIcon是一个强大的工具,可以帮助Delphi开发者轻松实现系统托盘功能,提升用户体验,并且其跨环境的兼容性使其在不同场景下都具备实用性。通过熟练掌握和使用这样的控件,可以提高开发效率,同时也...

    Delphi 托盘控件

    5. **ShowBalloonHint**:创建一个气泡提示,用于向用户显示临时信息。你可以通过设置其Title、Hint和Timeout属性来定制提示内容和显示时间。 创建托盘控件的基本步骤如下: 1. 在表单设计器中,从Component ...

    Delphi代码演示TTrayIcon控件的使用方法.rar

    Delphi代码演示TTrayIcon控件的使用方法,带气泡提示的托盘图标,后键可退出程序,系统消息 处理最小化的时候 应该隐藏主窗体 同时显示托盘图标,互斥,就是你有我没有你没有我就有,设置的每5s弹出气泡和闪烁提醒。

    冒气泡的提示组件

    总的来说,"冒气泡的提示组件"是一个方便的Delphi控件,它简化了在桌面应用中创建提示信息的过程。通过理解并利用提供的资源文件,开发者可以轻松集成此组件,提升其应用程序的用户界面和交互性。

    Delphi图表控件

    Delphi图表控件是开发人员在使用Delphi编程时用于数据可视化的重要工具。TeeChart是其中一款广受欢迎的图表库,它为Delphi开发者提供了丰富的图表类型和强大的功能,帮助他们将复杂的数据转化为易于理解的图形表示。...

    delphi CoolTrayIcon控件

    3. **通知区域提示**:当程序有重要事件发生时,可以弹出气泡提示,告知用户相关信息。 4. **事件处理**:提供了丰富的事件处理机制,如OnClick、OnRightClick等,使得开发者能够轻松响应用户的交互行为。 5. **...

    漂亮简洁的气泡Hint提示

    首先,气泡Hint是一种轻量级的提示方式,它以一个小气泡的形式出现在鼠标指针附近,显示短暂的信息或提示。这种设计不仅不打断用户的操作流程,还能提供及时的帮助。气泡Hint通常包含一个标题和一段简短的描述,使得...

    liuqipaohint_气泡提示_

    这样做可能是因为这个实现提供了更多的定制选项,比如自定义样式、延迟显示时间、气泡大小等,或者是为了在多个提示同时出现时保持界面的整洁。 在文件“liuqipaohint.pas”中,我们可以预期找到一个用Pascal语言...

    delphi类似msn信息提示窗口

    "delphi类似msn信息提示窗口"这个主题涉及的是如何在Delphi中创建一个模仿MSN即时通讯软件中那种在屏幕右下角弹出的用户上下线提示信息的窗口。这样的窗口通常被称为气泡提示或者托盘提示,它可以在不干扰用户主要...

    Delphi 12 控件之TMS VCL UI Pack v13.1.3.2.7z

    其中,TMS VCL UI Pack v13.1.3.2 是一个不可或缺的工具包,它为 Delphi 开发者提供了大量的自定义控件,以增强用户界面的视觉效果和交互体验。 TMS VCL UI Pack 是由 TMS Software 公司开发的一款专业级控件集,其...

Global site tag (gtag.js) - Google Analytics