实现指定格式的属性
步骤 1 中创建的 TClockLabel 组件需要在显示当前时间时定义日期时间格式作为属性,以便组件用户可以指定。
一、实现指定格式的属性
要实现格式属性,请在 TClockLabel class 的发布部分添加以下一行:
property Format: String;
另外,在公共部分添加构造函数的定义如下:
constructor Create(AOwner: TComponent); override;
更改格式后,需要更新标签。要更新标签,请将 UpdateLabel 方法作为私有成员引入。
代码应如下所示 :
type
TClockLabel = class(TLabel)
private{ Private declarations }procedure UpdateLabel;
protected{ Protected declarations }
public{ Public declarations }constructor Create(AOwner: TComponent); override;
published{ Published declarations }property Format: String;
end;
插入这一行后,按 CTRL+SHIFT+C。集成开发环境会自动为格式属性添加一个设置器,并为构造函数添加一个骨架。现在的代码应该是这样的:
type
TClockLabel = class(TLabel)
privateFFormat: String;procedure SetFormat(const Value: String);
publicconstructor Create(AOwner: TComponent); override;
publishedproperty Format: String read FFormat write SetFormat;
end;{ TClockLabel }constructor TClockLabel.Create(AOwner: TComponent);
begininherited;
end;procedure TClockLabel.UpdateLabel;
beginend;procedure TClockLabel.SetFormat(const Value: String);
beginFFormat := Value;
end;
根据 System.SysUtils.DateTimeToString 的文档,日期时间格式的典型值是 “c”。因此,将 FFormat 字段初始化为 “c”。
constructor TClockLabel.Create(AOwner: TComponent);
begininherited;FFormat := 'c';
end;
现在执行 UpdateLabel 和 SetFormat 方法如下:
procedure TClockLabel.UpdateLabel;
beginText := FormatDateTime(FFormat, Now);
end;procedure TClockLabel.SetFormat(const Value: String);
beginFFormat := Value;UpdateLabel;
end;
二、继承父组件的样式
如果您希望您的组件继承父组件的样式,请使用以下代码:
type
TClockLabel = class(TLabel)
private{ Private declarations }procedure UpdateLabel;function GetDefaultStyleLookupName: string; override;
protected{ Protected declarations }
public{ Public declarations }constructor Create(AOwner: TComponent); override;
published{ Published declarations }property Format: String;
end;
本步骤完,下一步骤参见《【Delphi】扩展现有组件创建新的 FireMonkey 组件(步骤三)》