知识大全 Delphi自定义部件开发(二)[2]
Posted 属性
篇首语:如果这世界上真有奇迹,那只是努力的另一个名字。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Delphi自定义部件开发(二)[2]相关的知识,希望对你有一定的参考价值。
DELPHI基础教程:Delphi自定义部件开发(二)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
下例是名为IsTrue的布尔类型属性设置缺省值True的过程
type
TSampleComponent=class(TComponent)
private
FIsaTrue: Boolean;
pubilic
constructor Create (AOwner: TComponent) Overvide;
published
property Istrue: Boolean read FIsTrue write FIsTrue default True;
end;
constructor TSampleComponent Create (AOwner: TComponent)
begin
inherited Create ( Aowner)
Fistvue := True; 设置缺省值
end;
编写属性编辑器
Object Inspector提供所有类型属性的缺省编辑器 Delphi也支持通过编写和注册属性编辑器的方法为属性设计自己的编辑器 可以注册专门为自定义部件的属性设计的编辑器 也可设计用于所有某类型的属性 编写属性编辑器需要下列五个步骤
● 继承一个属性编辑器对象
● 将属性作为文本编辑
● 将属性作为整体编辑
● 描述编辑器属性
● 注册属性编辑器
⑴ 继承属性编辑器对象
DsgnIntf库单元中定义了几种属性编辑器 它们都是从TPropertyEditor继承而来 当创建属性编辑器时 可以直接从TPropertyEditor中继承或从表中的任一属性编辑器中继承
表 属性编辑器的类型
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
类型 编辑的属性
─────────────────────────────────────
TOrdinalProperty 所有有序的属性(整数 字符 枚举)
TIntegerProperty 所有整型 包括子界类型
TCharProperty 字符类型或字符子集
TEnumProperty 任何枚举类型
TFloatProperty 所有浮点数
TStringProperty 字符串 包括定长的字符串
TSetElementProperty 集合中的独立元素
TSetElementProperty 所有的集合 并不是直接编辑集合类型 而是展开成一列集合元素属性
TClassProperty 对象 显示对象名 并允许对象属性的展开
TMethodPropevty 方法指针 主要指事件
TComponentProperty 相同窗体中的部件 用户不能编辑部件的属性 但能指向兼容的部件
TColorProperty 部件颜色 显示颜色常量 否则显示十六进制数
TFontNameProperty 字体名称
TFontProperty 字体 允许展开字体的属性或弹出字体对话框
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
下面是TFloatPropertyEditor的定义
type
TFloatProperty=Class(TPropertyEditor)
public
function AllEqual: Boolean; override;
function GetValue: String; override;
procedure SetValue ( Const Value: string ) override;
end;
⑵ 象文本一样编辑属性
所有的属性都需要将它们的值在Object Inspector窗口中以文本的方式显示 属性编辑器对象提供了文本表现和实际值之间转换的虚方法 这些虚方法是GetValue和SetValue 你的属性编辑器也能继承了一系列的方法用于读和写不同类型的值 见下表
表 读写属性值的方法
━━━━━━━━━━━━━━━━━━━━━━━━━━
属性类型 Get 方法 Set 方法
──────────────────────────
浮点数 GetFloatValue SetFloatVallue
方法指针 GetMethodValue SetMehodValue
有序类型 GetOrdValue SetOrdValue
字符串 GetStrValue SetStrValue
━━━━━━━━━━━━━━━━━━━━━━━━━━
当覆蓋GetValue方法时 调用一个 Get 方法 当覆蓋SetValue方法时调用一个 Set 方法
属性编辑器的GetValue方法返回一个字符串以表现当前属性值 缺省情况下GetValue返回 unknown
属性编辑器的SetValue接收Object Inspector窗口String类型的参数 并将其转换成合适的类型 并设置属性值
下面是TIntegerProperty的GetValue和SetValue的例子
function TIntegerProperty GetValue: string;
begin
Result := IntToStr (GetOrdValue)
end;
proceduve TIntegerPropertySetValue (Const Value: string)
var
L: Longint;
begin
L := StrToInt(Value) 将字符串转换为数学
with GetTypeData (GetPropType)^ do
if ( L < Minvalue ) or ( L > MaxValue ) then
Raise EPropertyError Create (FmtloadStr(SOutOfRange
[MinValue MaxValue]))
SetOrdValue (L)
end;
⑶ 将属性作为一个整体来编辑
Delphi支持提供用户以对话框的方式可视化地编辑属性 这种情况常用于对对象类型属性的编辑 一个典型的例子是Font属性 用户可以找开Font对话框来选择字体的属性
提供整体属性编辑对话框 要覆蓋属性编辑对象的Edit方法 Edit方法也使用 Get 和 Set 方法
在大多数部件中使用的Color属性将标准的Windows颜色对话框作为属性编辑器 下面是TColorProperty的Edit方法
procedure TColorProperty Edit
var
ColorDialog: TColorDialog;
begin
ColorDialog := TColorDialog Create(Application) 创建编辑器
try
ColorDialog Color := GetOrdValue; 使用已有的值
if ColorDialog Execute then
SetOrdValue (ColorDialog Color)
finally
ColorDialog Free;
end;
end;
⑷ 描述编辑器的属性
属性编辑必须告诉Object Inspector窗口如何采用合适的显示工具 例如Object Inspector窗口需要知道属性是否有子属性 或者是否能显示可能取值的列表 描述编辑器的属性通常覆蓋属性编辑器的GetAttributes方法
GetAttributes返回TPropertyAttributes类型的集合 集合中包括表中任何或所有的值
表 属性编辑器特征标志
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
标志 含 义 相关方法
──────────────────────────────
paValuelist 编辑器能给予一组枚举值 GetValues
paSubPropertie 属性有子属性 GetPropertises
paDialog 编辑器能显示编辑对话框 Edit
PaMultiSelect 当用户选择多于一个部件时 属性应能显示 N/A
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
cha138/Article/program/Delphi/201311/25118相关参考
DELPHI基础教程:Delphi自定义部件开发(二)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
DELPHI基础教程:Delphi自定义部件开发(二)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
DELPHI基础教程:Delphi自定义部件开发(一)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
DELPHI基础教程:Delphi自定义部件开发(三)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
DELPHI基础教程:Delphi自定义部件开发(四)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
DELPHI基础教程:Delphi自定义部件开发(一)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
DELPHI基础教程:Delphi自定义部件开发(一)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
DELPHI基础教程:Delphi自定义部件开发(一)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
DELPHI基础教程:Delphi自定义部件开发(三)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
DELPHI基础教程:Delphi自定义部件开发(三)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看