知识大全 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自定义部件开发(二)[3]

DELPHI基础教程:Delphi自定义部件开发(二)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(二)[1]

DELPHI基础教程:Delphi自定义部件开发(二)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(一)[2]

DELPHI基础教程:Delphi自定义部件开发(一)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(三)[2]

DELPHI基础教程:Delphi自定义部件开发(三)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(四)[2]

DELPHI基础教程:Delphi自定义部件开发(四)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(一)[3]

DELPHI基础教程:Delphi自定义部件开发(一)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(一)[1]

DELPHI基础教程:Delphi自定义部件开发(一)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(一)[4]

DELPHI基础教程:Delphi自定义部件开发(一)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(三)[4]

DELPHI基础教程:Delphi自定义部件开发(三)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi自定义部件开发(三)[3]

DELPHI基础教程:Delphi自定义部件开发(三)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看