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] ...
随机推荐
- CF 914F Substrings in a String——bitset处理匹配
题目:http://codeforces.com/contest/914/problem/F 可以对原字符串的每种字母开一个 bitset .第 i 位的 1 表示这种字母在第 i 位出现了. 考虑能 ...
- HttpFileCollection类
最近在学HttpRequest类搞文件上传的时候看到Request.Files返回了HttpFileCollection 这个类的一个对象,这个类用于获取浏览器上传的文件集合,在文件上传的时候可以通过 ...
- 添加BAUD_4800
1.hal_uart.h 添加 #define HAL_UART_BR_4800 0x05 2.mt_uart.h 修改 #define MT_UART_DEFAULT_BAUDRATE HAL_UA ...
- SpringCloud初体验:五、Sidecar 将 PHP 这类非 Java 生态语言的服务接入 Spring Cloud
先起一个 Sidecar 服务,一个PHP服务一个应用,和PHP服务部署在同一台机子,通过 localhost 访问,这样就解决了网络开销,相当于本地进程间调用 Sidecar 服务比较简单, 1.这 ...
- C++ 常用函数方法
/* * 拆分字符串 * 参数: * strData 字符串 * split 分隔符 * 返回: * 返回动态数组std::vector<std::string> ,记得要delete 内 ...
- SSH pts 虚拟终端
昨天晚上小试了一下SSH,学到了一些乱七八糟的命令,知道了一种古老装逼的聊天方式:write.期间下定决心终于弄明白了pts/0之类的东西到底是什么东西. 先说pts/0吧,man里面是这样说的:pt ...
- winform截屏
引自 http://www.cnblogs.com/aland-liu/archive/2011/07/20/Winform.html 已经注册博客好久,一直由于工作原因没有打理.今天在网上看了一个截 ...
- 安装Linux软件时没有图形界面的问题
Q: 现在Linux下的软件有很多也采用图形界面安装了:但有时候我们发现启动安装程序时本该出现图形界面时却出现了文本界面. A: 检查常用的图形函数库(最主要的自然是gtk, qt)是否已安装.尤其是 ...
- springMVC学习(6)-包装pojo类型、数组、list、Map类型参数绑定
一.包装类型pojo参数绑定: 需求:商品查询controller方法中实现商品查询条件传入. 实现方法: 1)在形参中 添加HttpServletRequest request参数,通过reques ...
- 挂载本地ISO
http://www.linuxidc.com/Linux/2017-03/142087.htm 挂载本地ISO mount -o loop /home/iso/RHEL-server-7.0-x86 ...