Delphi笔记-自定义提示窗口
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笔记-自定义提示窗口的更多相关文章
- delphi笔记之nativeXml 转
delphi笔记之nativeXml 使用 CreateName 建立可直接指定根节点的名称 var XmlDoc: TnativeXml; Node:TxmlNode; Begin XmlDoc ...
- iOS学习笔记-自定义过渡动画
代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...
- html5+css3+javascript 自定义提示窗口
效果图: 源码: 1.demo.jsp <%@ page contentType="text/html;charset=UTF-8" language="java& ...
- Angular JS 学习笔记(自定义服务:factory,Promise 模式异步请求查询:$http,过滤器用法filter,指令:directive)
刚学没多久,作了一个小项目APP,微信企业号开发与微信服务号的开发,使用的是AngularJS开发,目前项目1.0版本已经完结,但是项目纯粹为了赶工,并没有发挥AngularJS的最大作用,这几天项目 ...
- delphi 可以自定义边框的文本框TSkinNormalEdit思路(QQ2011风格)
需求: QQ我的资料中基本资料窗体中的文本框: 正常状态下,文本框只有一条看起来只有一个像素的边框,边框的颜色从上到下由深到浅的渐变,当鼠标定位到该文本框时,其边框会变粗,而且边框的颜色加亮显示 如下 ...
- [Java] JSP笔记 - 自定义标签
自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...
- iOS阶段学习第33天笔记(自定义标签栏(UITabBar)介绍)
iOS学习(UI)知识点整理 一.自定义标签栏 1.方法一 单个创建标签栏 #import "AppDelegate.h" #import "SecondViewCont ...
- AngularJS笔记--自定义指令
在前端开发中, 我们会遇到很多地方都会用到同一种类型的控件.AngularJS提供了自定义指令功能,我们可以在指令里面定义特定的html模板.提供给前台html调用. 一. 指令的简单定义. 下面定 ...
- JavaScript学习笔记-自定义集合类
//集合类Set( ES6标准才有的类,目前兼容性较差)//自定义集合类:extend = function (o,p){ //定义一个复制对象属性的类函数 for(var x in p){ o[x] ...
随机推荐
- 禁止HTML页面缓存
head标签里增加: <meta http-equiv="X-UA-Compatible" content="IE=8"> <meta htt ...
- WCF揭秘学习笔记(5):WF定制活动
WF(Windows Workflow Foundation,Windows工作流基础)为.NET提供了一种基于模型的.声明方式的过程执行引擎,它改变了传统的通过一行行编写代码来开发服务功能的方式. ...
- 10个CSS+HOVER 的创意按钮
CSS hover 样式很简单,但是想创造出有意思.实用.有创意性的特效是很考验设计师的创意能力,所以设计达人每隔一段时间都会分享一些与鼠标点击.悬停的相关特效,以便大家获得更好的创造灵感. 今天我们 ...
- sql 判断 数据库 表 字段 是否存在
select * From master.dbo.sysdatabases where name='数据库名'select * from sysobjects where id = object_id ...
- SpringCloud负载均衡笔记
SpringCloud的负载均衡组件用的是Ribbon,这个东西就是服务消费者.它只是一个配置用的中转器,放在 Zuul 和 Eureka Client 之间用来转发的,它里面写了好多规则,用来指定负 ...
- 小峰mybatis(1) 处理clob,blob等。。
一.mybatis处理CLOB.BLOB类型数据 CLOB:大文本类型:小说啊等大文本的:对应数据库类型不一致,有long等: BLOB:二进制的,图片:电影.音乐等二进制的: 在mysql中: bl ...
- 杂项-TOOL:NPIO
ylbtech-杂项-TOOL:NPIO NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作.NPOI是一个开源的Ja ...
- 什么是DSCP,如何使用DSCP标记搭配ROS策略
一.什么是DSCP DSCP:差分服务代码点(Differentiated Services Code Point),IETF于1998年12月发布了Diff-Serv(Differentiated ...
- 6.22-Servlet
一.servlet servlet是运行在服务器端的java程序 jsp专注于显示 servlet处理请求和响应 创建servlet 继承HttpServlet 实现servlet接口 配置servl ...
- GlusterFS PERFORMANCE TUNING
众所周知,glusterfs对小文件而言,就是个鸡肋,特别是在一个目录下有过W的小文件图片时,ls简单就是个坑,下面我对线上的glusterfs参数做一些优化调整,调整的命令: gluster vol ...