type
TBoldComponentNameProperty =
class(TComponentNameProperty)
public
procedure PropDrawName(Canvas: TCanvas;
const Rect: TRect; Selected: Boolean); override;
end;
procedure TBoldComponentNameProperty.PropDrawName(
Canvas: TCanvas; const Rect: TRect; Selected: Boolean);
var
Style: TFontStyles;
begin
Style := Canvas.Font.Style;
Canvas.Font.Style := Canvas.Font.Style [fsBold];
try
inherited;
finally
//恢复字体的样式以便Delphi正确的画属性值
Canvas.Font.Style := Style;
end;
end;
下拉列表
一个属性编辑器可能会拥有一个下拉列表框,用户可以通过选择列表项来改变属性值。Delphi 5使用了自绘画的特性来改进Tcolor和Tcursor属性的界面友好性,我们也可以作同样的事情,通过重载ListDrawValue,ListMeasureHeight和ListMeasureWidth方法可以很容易的做到。下面是这几个方法的声明:
procedure ListDrawValue(const Value: string;
Canvas: TCanvas; const Rect: TRect; Selected: Boolean);
procedure ListMeasureHeight(const Value: string;
Canvas: TCanvas; var Height: Integer);
procedure ListMeasureWidth(const Value: string;
Canvas: TCanvas; var Width: Integer);
ListDrawValue方法类似于PropDrawValue方法,但它的Selected是有意义的,表示用户已经选择了这个列表项。Delphi会根据Selected参数自动设定画布的颜色为合适的值,所以通常情况下我们可以忽略这个参数。Value参数是要显示的字符串,Delphi调用GetValue方法来获得这些字符串,
在对象编辑器显示列表框之前,它会调用ListMeasureHeight和ListMeasureWidth方法来获得每个列表项的尺寸,我们可以设定Height和Width参数来获得想要得到的高度和宽度。下拉列表框使用全部列表项中最大的尺寸,然后显示相同区域大小的列表项。
当用户滚动列表框时,Delphi调用ListDrawValue方法来画心新的可见的列表项。用户可能会前后滚动多次,如果列表项很多,每次重绘需要很多时间的话,我们应该建立一个临时的位图,把列表项先画到位图上,然后在ListDrawValue方法中快速显示位图。这实际上就是双缓冲技术。
下面的例子是一个扩展的集合类型属性,下拉列表显示全部的集合元素,并在每个集合元素旁边添加一个复选框。复选框是通过位图来模仿的,属性编辑器先取得复选框位图,并在不同情况下显示打叉和未打叉的位图。全局变量Checked和Unchecked保存这两个位图 为Tbitmap类型。下面的代码显示了TSetPropertyEx.类是如何实现自绘画集合类型的:
// 在下拉列表框的每一个列表项旁边画一个复选框
procedure TSetPropertyEx.ListDrawValue(const Value: string;
Canvas: TCanvas; const Rect: TRect; Selected: Boolean);
var
IsChecked: Boolean;
OrdValue: Integer;
begin
OrdValue := GetOrdValue;
IsChecked := GetEnumValue(EnumInfo, Value) in
TIntegerSet(OrdValue);
Canvas.FillRect(Rect);
Canvas.TextRect(Rect, Rect.Left Checked.Width 2,
Rect.Top 1, Value);
if IsChecked then
Canvas.Draw(Rect.Left 1, Rect.Top 1, Checked)
else
Canvas.Draw(Rect.Left 1, Rect.Top 1, Unchecked);
end;
procedure TSetPropertyEx.ListMeasureHeight(
const Value: string; Canvas: TCanvas;
var Height: Integer);
begin
if Height < Checked.Height then
Height := Checked.Height;
end;
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关文章
热点关注
- AnsiString?PChar?赋值
- Report Machine 3.0 (报表
- MapX v5.02.25 破解文件
- WDBOX v1.0 多选下拉列表
- 用Delphi开发视频聊天软件
- Delphi客户服务器应用开发
- AES 加密算法函数包及演示
- ACCESS/SQL 数据库存取图
- 熊猫烧香核心源码(Delphi
- 把整个网页保存成JPG图片(
- 高级计算器 V1.0 (含代码)
- Delphi版模仿熊猫烧香病毒
- 精确定位打印程序 (含源代
- Delphi文件管理(六)
- 将数字四舍五入保留两位小
- 绝地程序编辑器 v1.0.1.4
- 关于自定义界面的方案(Eas
- Delphi 对象链接与嵌入(
- 用HTML页面做程序界面演示
- Delphi模拟最小化恢复关闭
- 用Delphi实现24位真彩色图
- 限制客户机运行程序 (有关
- Delphi中用API实现在MSN的
- DELPHI数据库应用程序的开
- Delphi 动态链接库编程(
- QQ号码自动申请器及源代码
- Win9x 下调整系统时钟控件
- delphi中的XML解析控件TXM
- 几个游戏内存修改器代码
- TT8 DevExpress 最新系列
- Tnt Delphi Unicode Contr
- DelphiTwain 2004-1-20 (
- Delphi中数据的自动录入
- 经验技巧:分享两条Delphi
- Delphi中Hash表的使用方法
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营
建站经验
策划盈利
搜索优化
网站推广
免费资源
网站联盟
联盟新闻
联盟介绍
联盟点评
网赚技巧
行业资讯
业界动态
搜索引擎
网络游戏
门户动态
电子商务
广告传媒
网络编程
Asp.Net编程
Asp编程
Php编程
Xml编程
Access
Mssql
Mysql
其它
服务器技术
Web服务器
Ftp服务器
Mail服务器
Dns服务器
安全防护
软件技巧
其它软件
Word
Excel
Powerpoint
Ghost
Vista
QQ空间
QQ
FlashGet
迅雷
Internet Explorer
网页制作
FrontPages
Dreamweaver
Javascript
css
photoshop
fireworks
Flash
程序设计
Java技术
C/C++
VB
delphi
网络知识
网络协议
网络安全
网络管理
组网方案
Cisco技术
操作系统
Win2000
WinXP
Win2003
Mac OS
Linux
FreeBSD




