我的主页: http://www.tommstudio.com/
属性编辑器对于大多数Delphi程序员来说无疑是很熟悉的,在对象编辑器的内核中有着大量的属性编辑器,每个对象编辑器中的属性都对应一个属性编辑器类的实例。
Delphi5中提供了一些新的高级特性,使我们能够定义新的属性编辑器,为以有的属性提供新的功能,或者设定和显示新的控件的新的属性的显示方法。在Delphi5以前,对象编辑器只能够以文本的形式显示属性值。在Delphi 5中给属性编辑器提供了新的特性,使我们能够以任何形式显示属性的名称和值,如下图所示如果属性有一个下拉列表,我们就可以为每一个列表项添加一个图标。下面我们就来研究一下如何实现属性编辑器的自绘画的功能。
属性编辑刷新器
所有的属性编辑器都是从TpropertyEditor继承下来的。我们可以为特定的属性类型、属性名或控件注册一个属性编辑器。对象编辑器检查每一个要显示的属性的名称和类型,选择合适的属性编辑器类。然后它会创建这个类的一个实例(每个属性对应一个实例)。当我们选择了另一个控件,对象编辑器会释放全部的属性编辑器对象,然后为新的控件创建新的对象。
属性编辑器可以决定如何显示属性的值以及用户如何设定一个新的属性值。比如,TintegerProperty调用IntToStr函数以字符串的形式显示整数值并用StrToInt函数来转换用户输入的新值。 当用户输入了一个新的属性值时,TcolorProperty同样使用一个整型值来表示,但把整数解释为颜色,并尽可能地映射颜色值为一个名称(如clBlack或clBtnFace) 。
一个属性编辑器实现上述功能是通过重载TpropertyEditor的一个或多个方法来实现的。绝大多数的属性编辑器需要重载GetValue方法,GetValue方法获得属性值的字符串形式。以及SetValue方法,SetValue方法把一个字符串转化为属性值。要想了解关于编写属性编辑器的进一步信息,需要仔细研究DsgnIntf.pas文件(在Delphi5\Source\Toolsapi目录下)以及Delphi 5 在线帮助(在"property editors, creating"部分里)。
基础步骤
要实现一个最基本的自绘画属性编辑器,我们只需要重载TpropertyEdiotr的PropDrawValue 方法。比如如前面图中所见到的,TcolorProperty属性重载了PropDrawValue方法在颜色名前显示一个对应于相应颜色的彩色小方块。为了理解如何使用PropDrawValue方法,我们为Tfont对象写一个新的属性编辑器,新的编辑器将会用当前字体名对应的字体来显示Tfont对应的属性。
Delphi本身已经提供了一个属性编辑器TfontProperty,它在对象编辑器中添加了一个省略按钮,用户可以点击按钮调出标准的Windows字体选择对话框来设定字体的属性。我们可以直接从TfontProperty继承新的编辑器,类的声明如下:
type
TVisualFontProperty = class(TFontProperty)
public
procedure PropDrawValue(Canvas: TCanvas;
const Rect: TRect; Selected: Boolean); override;
end;
当对象编辑器需要显示属性值的时候,IDE会调用PropDrawValue方法来画属性值。Delphi传递一个画布对象(Canvas)及绘画区域来供程序画属性值。Selected参数现在还没用,我们可以忽略它。
注意:Delphi并不会为给定的绘画区域设定剪裁区域,也就是说我们必须严格按照给定的区域绘画,如果超出界限,会把别的属性值给覆盖掉。
TvisualFontProperty对象的唯一任务就是选择相应于Font名字的字体来画属性值。它设定字体的名称,样式以及颜色(当颜色不同于背景色的时候),字体的大小显示保留不动,以免使用非常大或非常小的字体大小画值的时候会出现的问题。下面就是PropDrawValue的实现部分:
// 替换乏味的Tfont属性值的显示方式,用选定的字体样式
//和字体来画相应的属性值,用户可能会选择比较大的字体
//尺寸,所以这里保留字体大小不动,只有当字体颜色不同
//于背景色的时候,才用相应的颜色画,否则前景背景一样
//的话就无法看到字体的属性值了
procedure TVisualFontProperty.PropDrawValue(
Canvas: TCanvas; const Rect: TRect; Selected: Boolean);
var
Font: TFont;
begin
Font := TFont(GetOrdValue);
if Font <> nil then begin
if ColorToRGB(Font.Color) <> ColorToRGB(clBtnFace) then
Canvas.Font.Color := Font.Color;
Canvas.Font.Name := Font.Name;
Canvas.Font.Style := Font.Style;
end;
inherited;
end;
另外我们重载GetValue方法来提供更多的信息,比如字体名和大小。
function TVisualFontProperty.GetValue:
文章整理:西部数码--专业提供域名注册、虚拟主机服务
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



