[求助]关于控件的属性编辑器的使用(100分)

T

tianli_

Unregistered / Unconfirmed
GUEST, unregistred user!
编写控件时,怎样使用属性编辑器,或者自定义属性编辑器
请给出思路
 
published下定义的会显示在属性编辑器中
 
任豆豆,你好,感谢你的答复,但是我的意思是怎样使用属性编辑器(PropertyEditor)
比如,作成类似于TMemo的Lines属性,或者自己定义一个窗体,比如点击Font时,出现自己编写的字体设置对话框
 
这个,参考源代码是最好的事情!
系统自带很多代码啊,或者看看第三方控件的代码。
 
给个思路吧
 
★★★如何自定义属性编辑器

一、派生出一个属性编辑器对象:
Delphi的DsgnIntf.pas(D5)单元中声明了几个属性编辑器,它们都是从一个共同的基类
TPropertyEditor继承下来的。当创建一个属性编辑器时,属性编辑器必须继承于TPropertyEditor
或它的派生类。
至于究竟需要选择哪个编辑器,这取决于需要编辑哪些属性。如需要编辑一个整型的属性,
就可用TIntegerProperty作为属性编辑器。如要在编辑属性的同时加入其他功能,则需要以
TIntegerProperty为祖先类,派生出一个新的属性编辑器。

二、覆盖方法:
当派生一个属性编辑器对象时,必须覆盖GetValue()和SetValue()这两个方法。GetValue()是
获得属性值以供在Object Inspector中显示,这个值以字符串的形式返回; SetValue()的作用是
根据输入到Object Inspect上的字符串来设置属性的值;
如果需要获取属性的枚举值供编辑时选择,还需要覆盖GetValues()方法;
如果需要用对话框来编辑属性,需要覆盖GetAttributes()方法,以便让Object Inspector知道
这个属性可以用一个对话框来编辑。GetAttributes()方法的返值用于设定属性编辑器的特性。
paValueList 可以从下拉列表中选择属性值,适用于枚举型的属性诸如TForm.BorderStyle和
整型变量如TColor、TCharSet;
paSubProperties 包含子属性,子属性右缩进显示。适用于集合类型的属性,如TOpenDialog.Option和TForm.Font;
paDialog 在Object Inspector上将出现一个省略号按钮,单击这个按钮,将调用属性编辑器的
Edit()方法打开一个对话框用于TForm.Font这样的属性;
paMultiSelect 允许为多个组件选择属性值,有的属性没有这个功能,如Name属性;
paAutoUpdate 当属性的值有变化,就调用SetValue()把值写到.DFM文件中,适用用于TForm.Caption等属性;
paFullWidthName 告诉Object Inspector这值不需要交付,名称应以Object Inspector的全宽交付;
paSortList 按字母顺序排列属性值的列表;
paReadOnly 属性是只读的;
paRevertable 属性的值可以恢复为以前的值。TFont等嵌套的属性不应恢复;
如果GetAttributes()方法的返值包括paDialog,则还要覆盖Edit()方法以调对话框;

三、注册新的属性编辑器:
可以调用RegisterPropertyEditor()来注册一个属性编辑器,这个过程是这样声明的:
procedure RegisterPropertyEditor(PropertyType: PTypeInfo; ComponentClass: TClass;
const PropertyName: string; EditorClass: TPropertyEditorClass);
第一个参数叫PropertyType,它是一个指针,指向要编辑的属性的运行期类型信息。
ComponentClass参数用于指定这个属性编辑器所适用的组件类。
PropertyName参数用于指定属性的名称。
EditorClass参数用于指定属性编辑器的类型。

具体实例可以参考C:/Program Files/Borland/Delphi5/Source/Property Editors下的单元。
 
接受答案了.
 
顶部