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<> then
begin
SetWindowRgn(Self.Handle,,true);
DeleteObject(FRegion);
FRegion:=;
end;
end; procedure TPBHint.Paint;
var tempRect:TRect;
begin
tempRect:=ClientRect;
Inc(tempRect.top,);
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(,,Width,Height,,);
tempRgn:=CreateRectRgn(,,Width div -,);
CombineRgn(FRegion,FRegion,tempRgn,RGN_DIFF);
tempRgn:=CreateRectRgn(Width div +,,Width,);
CombineRgn(FRegion,FRegion,tempRgn,RGN_DIFF);
end;
if FRegion<> then
SetWindowRgn(Self.Handle,FRegion,true);
end; initialization
Application.ShowHint:=false; //先禁止提示窗口
HintWindowClass:=TPBHint; //将自定义的提示窗口类赋值给全局变量HintWindowClass,就可以替换掉原来的提示窗口了
Application.ShowHint:=true; //开启提示窗口
Application.HintColor:=clBlue; //改变提示窗口的背景颜色 end.

Delphi笔记-自定义提示窗口的更多相关文章

  1. delphi笔记之nativeXml 转

    delphi笔记之nativeXml   使用 CreateName 建立可直接指定根节点的名称 var XmlDoc: TnativeXml; Node:TxmlNode; Begin XmlDoc ...

  2. iOS学习笔记-自定义过渡动画

    代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...

  3. html5+css3+javascript 自定义提示窗口

    效果图: 源码: 1.demo.jsp <%@ page contentType="text/html;charset=UTF-8" language="java& ...

  4. Angular JS 学习笔记(自定义服务:factory,Promise 模式异步请求查询:$http,过滤器用法filter,指令:directive)

    刚学没多久,作了一个小项目APP,微信企业号开发与微信服务号的开发,使用的是AngularJS开发,目前项目1.0版本已经完结,但是项目纯粹为了赶工,并没有发挥AngularJS的最大作用,这几天项目 ...

  5. delphi 可以自定义边框的文本框TSkinNormalEdit思路(QQ2011风格)

    需求: QQ我的资料中基本资料窗体中的文本框: 正常状态下,文本框只有一条看起来只有一个像素的边框,边框的颜色从上到下由深到浅的渐变,当鼠标定位到该文本框时,其边框会变粗,而且边框的颜色加亮显示 如下 ...

  6. [Java] JSP笔记 - 自定义标签

    自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...

  7. iOS阶段学习第33天笔记(自定义标签栏(UITabBar)介绍)

    iOS学习(UI)知识点整理 一.自定义标签栏 1.方法一 单个创建标签栏 #import "AppDelegate.h" #import "SecondViewCont ...

  8. AngularJS笔记--自定义指令

    在前端开发中, 我们会遇到很多地方都会用到同一种类型的控件.AngularJS提供了自定义指令功能,我们可以在指令里面定义特定的html模板.提供给前台html调用. 一. 指令的简单定义.  下面定 ...

  9. JavaScript学习笔记-自定义集合类

    //集合类Set( ES6标准才有的类,目前兼容性较差)//自定义集合类:extend = function (o,p){ //定义一个复制对象属性的类函数 for(var x in p){ o[x] ...

随机推荐

  1. c# list排序的三种实现方式 (转帖)

    用了一段时间的gridview,对gridview实现的排序功能比较好奇,而且利用C#自带的排序方法只能对某一个字段进行排序,今天demo了一下,总结了三种对list排序的方法,并实现动态传递字段名对 ...

  2. docker 里面的supervisord不断killed

    这个原因就一般是百度上大家说的,内存不足啦 但是死也得死个明白 用这个命令 dmesg | egrep -i -B100 'killed process' 看一下就知道了 我的是docker限制了内存 ...

  3. Django mark_safe

    不用mark_safe: 用mark_safe: 用法: from django.shortcuts import render from django.utils.safestring import ...

  4. windows下隐藏磁盘分区

    在一定情况下有的人会想隐藏掉部分分区,比如双系统的情况 有两种方式 方法1: 删除盘符,适合在双系统的情况下隐藏掉另外一个系统相关的分区 请注意是删除盘符 不是删除分区 此电脑右键管理 点击磁盘管理 ...

  5. Python网络爬虫-xpath模块

    一.正解解析 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字.字母.下划线.中文 \W : 非\ ...

  6. 如何干净的清除Slave同步信息

    MySQL> show master status; +------------------+-----------+--------------+------------------+---- ...

  7. golang web框架 beego 学习 (三) beego获取参数

    直接上常用的例子吧: A:     获取URL中的参数 router func init() { beego.Router("/task/?:id/?:name", &co ...

  8. 2018ICPC网络赛(徐州站)A题题解

    一.题目链接 https://nanti.jisuanke.com/t/31453 二.题意 给定$N$个位置,$2^k$种颜色,让你去涂色,条件是相邻的两种颜色类型异或值的二进制表示不全为$1$(以 ...

  9. php printf() 输出格式化的字符串

    php printf() 函数用于输出格式化的字符串,本文章向码农介绍php printf()函数的使用方法和基本使用实例,感兴趣的码农可以参考一下. 定义和用法 printf()函数输出格式化的字符 ...

  10. sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug

    在华为emotion ui 2.0自带的浏览器中,给部分组件设置了圆角后会发现背景仍然是方的,内部边框是圆的, 对于这种bug, 只需在对应的设置圆角的css样式中加入 background-clip ...