概述
在编写组件时,我喜欢给我的发布属性一个默认值,这样对象检查器就会以加粗的方式显示所有新更改的属性。这对于使用组件的人来说非常有用,因为他们可以轻松地识别默认和修改后的值。
例子
这是一个包含两个颜色和两个字体属性的组件示例:
我正在将发布属性 default
写入类结构中:
type
TMyComponent = class(TComponent)
private
FColor: TColor;
FColorTo: TColor;
FFont: TFont;
FFontHot: TFont;
procedure SetColor(const Value: TColor);
procedure SetColorTo(const Value: TColor);
procedure SetFont(const Value: TFont);
procedure SetFontHot(const Value: TFont);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Color: TColor read FColor write SetColor default clGreen;
property ColorTo: TColor read FColorTo write SetColorTo default clBlue;
property Font: TFont read FFont write SetFont; //< set default?
property FontHot: TFont read FFontHot write SetFontHot; //< set default?
end;
以及构造函数:
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FColor := clGreen;
FColorTo := clBlue;
FFont := TFont.Create;
FFont.Color := clRed;
FFont.Name := 'Segoe UI';
FFont.Size := 10;
FFont.Style := [];
FFontHot:= TFont.Create;
FFontHot.Color := clNavy;
FFontHot.Name := 'Verdana';
FFontHot.Size := 8;
FFontHot.Style := [fsItalic];
end;
destructor TMyComponent.Destroy;
begin
FFont.Free;
FFontHot.Free;
inherited Destroy;
end;
问题
我的问题是如何将已发布的字体属性“标记”为默认值?
当我将组件添加到表单中时,对象检查器中的两个TFont属性都是粗体(非默认)。如果我单击每个已发布字体旁边的省略号,我可以看到从构造函数设置的值显示出来 - 但它们仍然是粗体。然而,奇怪的是,每个字体的大小值从未以粗体显示(即未更改)。
标准已发布属性可以非常容易地设置为default
,但是如何处理具有子属性的TFont等类呢?
我无法从类结构中设置默认值,只能在构造函数中设置。即使我能够从类结构中定义默认值(这似乎是不可能的),我也怀疑它是否有效,因为字体尚未创建。例如(显然不起作用):
published
property FontHot: TFont read FFontHot write SetFontHot default FFontHot.Color := clRed; //< set default?
那么,当我将新组件添加到对象检查器时,如何使已发布的TFont属性显示为默认值且不变?我猜其他类似于TFont的具有子属性的类也适用。