我的主页: http://www.tommstudio.com/
【程序编程相关:Delphi7中存储unicode的BU】属性编辑器对于大多数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并不会为给定的绘画区域设定剪裁区域,也就是说我们必须严格按照给定的区域绘画,如果超出界限,会把别的属性值给覆盖掉. ... 下一页