• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi笔记-自定义提示窗口

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
unit pbHint;

interface

uses
  Windows, Controls, Forms, Graphics;

type
  TPBHint=class(THintWindow) //要自定义提示窗口类,必须从THintWindow类继承
  private
    FRegion:THandle;  //保存当前提示窗口的区域句柄,用来设置窗口的形状
    procedure FreeCurrentRegion;  //释当前的区域句柄
    procedure SetRegion(Rect:TRect);
  public
    Destructor Destroy;override;  //复盖析构函数
    procedure ActivateHint(Rect:TRect;const AHint:String);override;  //复盖该方法,在提示窗口弹出前,设置窗口的形状
    procedure CreateParams(var params:TCreateParams);override; //复盖该方法,去掉WS_Border属性
    procedure Paint;override; //复盖该方法,改变画笔的颜色,然后再画出提示内容
  end;

implementation

{ TPBHint }

procedure TPBHint.ActivateHint(Rect: TRect; const AHint: String);
begin
  with Rect do
  begin
    Right:=Right+Canvas.TextWidth('WWWW'); //这一句是为了让提示窗口的宽度增大4个字符
    Bottom:=Bottom+Canvas.TextHeight('WWWWWW');
  end;
  SetRegion(Rect);
  inherited;
end;

procedure TPBHint.CreateParams(var params: TCreateParams);
begin
  inherited;
  params.Style:=params.Style and (not WS_BORDER);
end;

destructor TPBHint.Destroy;
begin
  FreeCurrentRegion;
  inherited;
end;

procedure TPBHint.FreeCurrentRegion;
begin
  if FRegion<>0 then
  begin
    SetWindowRgn(Self.Handle,0,true);
    DeleteObject(FRegion);
    FRegion:=0;
  end;
end;

procedure TPBHint.Paint;
var tempRect:TRect;
begin
  tempRect:=ClientRect;
  Inc(tempRect.top,12);
  Canvas.Font.Color:=clRed;
  Canvas.Brush.Color:=clWhite;
  DrawText(Canvas.Handle,PChar(Caption),Length(Caption),tempRect,DT_NOPREFIX or DT_WORDBREAK or DT_CENTER or DT_VCENTER);
end;

procedure TPBHint.SetRegion(Rect: TRect);
var tempRgn:HRGN;
begin
  BoundsRect:=Rect;
  FreeCurrentRegion;
  with BoundsRect do
  begin
    FRegion:=CreateRoundRectRgn(0,0,Width,Height,15,15);
    tempRgn:=CreateRectRgn(0,0,Width div 2-2,10);
    CombineRgn(FRegion,FRegion,tempRgn,RGN_DIFF);
    tempRgn:=CreateRectRgn(Width div 2+2,0,Width,10);
    CombineRgn(FRegion,FRegion,tempRgn,RGN_DIFF);
  end;
  if FRegion<>0 then
    SetWindowRgn(Self.Handle,FRegion,true);
end;

initialization
  Application.ShowHint:=false;  //先禁止提示窗口
  HintWindowClass:=TPBHint;   //将自定义的提示窗口类赋值给全局变量HintWindowClass,就可以替换掉原来的提示窗口了
  Application.ShowHint:=true; //开启提示窗口
  Application.HintColor:=clBlue; //改变提示窗口的背景颜色
  
end.

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
收藏: Delphi版的Http隧道发布时间:2022-07-18
下一篇:
GDI+在Delphi程序的应用 – Photoshop色相/饱和度/明度功能发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap