支持自绘画的属性编辑器
const Value: string; Canvas: TCanvas;
var Width: Integer);
begin
Width := Width Checked.Width 2;
end;
类似于显示集合元素,对于布耳类型的属性我们也可以加一个复选框。下面我们要实现TBooleanPropertyEx 属性编辑器对布耳类型进行了扩展,对于不同的布耳类型,比如ByteBool, WordBool和LongBool属性的实现方式是类似的,当时需要不同的属性编辑器。下面就是TbooleanPropertyEx的实现代码,对于复选框如何相应消息,有点小问题,因为通常我们是希望单击实现复选框切换状态,Delphi不支持单击,我们只好使用双击了(估计在Delphi 6中属性编辑器可能会支持单击),注意双击会调用属性编辑器的Edit方法。对于集合元素或布耳属性,双击可以切换属性值。估计在Delphi 6中属性编辑器可能会支持单击。
//根据True或者False来画一个复选框及布耳值的文本标签
procedure DrawBoolCheckBox(Canvas: TCanvas;
const Rect: TRect; const Value: string);
begin
Canvas.FillRect(Rect);
Canvas.TextRect(Rect, Rect.Left Checked.Width 2,
Rect.Top 1, Value);
if Value = BooleanIdents[False] then
Canvas.Draw(Rect.Left 1, Rect.Top 1, UnChecked)
else
Canvas.Draw(Rect.Left 1, Rect.Top 1, Checked);
end;
{ TSetElementPropertyEx }
// 每个列表项旁边显示一个复选框,用户必须双击
//而不是单击才能切换复选框状态
procedure TSetElementPropertyEx.PropDrawValue(
Canvas: TCanvas; const Rect: TRect; Selected: Boolean);
begin
DrawBoolCheckBox(Canvas, Rect, Value);
end;
{ TBoolPropertyEx }
// 为ByteBool, WordBool和LongBool类型显示复选框
procedure TBoolPropertyEx.PropDrawValue(Canvas: TCanvas;
const Rect: TRect; Selected: Boolean);
begin
DrawBoolCheckBox(Canvas, Rect, Value);
end;
使用属性编辑器
最后我们需要作的就是注册这些新的属性编辑器,大多数的编辑器比较容易注册,但是新的集合类属性编辑器存在一个问题,每一个集合都是一个独立的类型,我们必须分别为每个集合类型注册一遍属性编辑器。幸运的是,Delphi有一个不为人知的特性就是允许为所有的集合类型注册同一个属性编辑器。同通常的为单独一个类型注册属性编辑器不同的是,我们可以通过提供一个属性映射函数来实现注册,这个函数把对象和属性信息作为参数,然后返回属性编辑器类或是nil。这种情况下,映射函数校验属性类型,并为所有属性类型是tkSet的属性返回新的集合属性编辑器。下面是注册过程的代码:
//为全部的集合属性注册一个统一的属性编辑器
function SetMapper(Obj: TPersistent; PropInfo: PPropInfo):
TPropertyEditorClass;
begin
if PropInfo.PropType^.Kind = tkSet then
Result := TSetPropertyEx
else
Result := nil;
end;
procedure Register;
begin
RegisterPropertyEditor(TypeInfo(TFont), nil, '''''''',
TVisualFontProperty);
RegisterPropertyEditor(TypeInfo(TGraphic), nil, '''''''',
TVisualGraphicProperty);
RegisterPropertyEditor(TypeInfo(TComponentName),
TComponent, ''''Name'''', TBoldComponentNameProperty);
RegisterPropertyEditor(TypeInfo(Boolean), nil, '''''''',
TBooleanPropertyEx);
RegisterPropertyEditor(TypeInfo(ByteBool), nil, '''''''',
TBoolPropertyEx);
RegisterPropertyEditor(TypeInfo(WordBool), nil, '''''''',
TBoolPropertyEx);
RegisterPropertyEditor(TypeInfo(LongBool), nil, '''''''',
TBoolPropertyEx);
RegisterPropertyMapper(SetMapper);
文章整理:西部数码--专业提供域名注册、虚拟主机服务
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



