Delphi XE2
我有followind自定义组件:
TNaharWebDBEdit = class(TUniDBEdit)
private
FThemeColor : TNaharPalleteColor;
FThemeController: TNaharThemeController;
procedure OnObserver(Sender: TObject; AParam, AValue: Variant);
procedure UpdateColor;
procedure SetColor(const Value: TNaharPalleteColor);
function GetThemeManager: TNaharThemeManager;
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property ThemeColor: TNaharPalleteColor read FThemeColor write SetColor default npcWhite;
property ThemeManager: TNaharThemeManager read GetThemeManager;
end;
SetColor代码是:
procedure TNaharWebDBEdit.SetColor(const Value: TNaharPalleteColor);
begin
FThemeColor := Value;
UpdateColor;
end;
其中UpdateColor只检索主题的当前指定颜色,并且设置在Self.Color上。
一切正常。 ThemeColor属性显示在属性视图中,我可以将其更改为其他值。然而,在我保存表单并再次打开后,它又恢复到原始值,甚至不是默认值。
我制作了12个这样的组件,以及所有类似的代码。仅在Panel(来自TuniPanel)上工作正常,该属性保留在设计期间分配的值并在运行时正确检索它。
某些值未保存或未恢复属性。怎么抓住那个?
编辑:
TNaharPalleteColor = (npcMainColor, npcColorA, npcColorB, npcColorC, npcColorD, npcWhite, npcBlack, npcUnknown, npcNone);
我已将ThemeColor的值更改为npcWhite并保存。我在Notepad ++上打开了DFM,发现它没有被保存
我在属性上添加了STORED TRUE,它没有任何区别,仍然没有存储它。
但是,如果我关闭表单并再次打开它,它会将ThemeColor显示为npcMainColor(0),而不是默认值为npcWhite
编辑: 我已经打开了使用此组件的其他表单,并且可以看到之前该属性已被保存。打开并再次保存后,它将从DFM中删除。唯一仍然有效的是TuniPanel的后代,即TPanel。但它具有相同的代码,它都是复制和粘贴。
我已从课程中删除了这一行:
FThemeController: TNaharThemeController;
现在组件正确保存DFM上的FThemeColor,按预期工作。为什么呢?
答案 0 :(得分:7)
请参阅Default Property Values的文档。默认值不会保存到.dfm。
我猜你忘了将FThemeColor
初始化为构造函数中的默认值。 (由于实例字段始终初始化为零值,因此仅在默认值为非零时才需要这样做。)