Edu*_*ias 1 delphi custom-component delphi-xe2
德尔福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;
Run Code Online (Sandbox Code Playgroud)
SetColor代码是:
procedure TNaharWebDBEdit.SetColor(const Value: TNaharPalleteColor);
begin
FThemeColor := Value;
UpdateColor;
end;
Run Code Online (Sandbox Code Playgroud)
UpdateColor只是为目标指定的主题颜色和设置在Self.Color上.
一切正常.ThemeColor属性显示在属性视图中,我可以将其更改为其他值.然而,在我保存表单并再次打开后,它又恢复到原始值,甚至不是默认值.
我制作了12个这样的组件,以及所有类似的代码.仅在Panel(来自TuniPanel)上工作正常,该属性保留在设计期间分配的值并在运行时正确检索它.
某些值未保存或未恢复属性.怎么抓住那个?
编辑:
TNaharPalleteColor = (npcMainColor, npcColorA, npcColorB, npcColorC, npcColorD, npcWhite, npcBlack, npcUnknown, npcNone);
Run Code Online (Sandbox Code Playgroud)
我已将ThemeColor的值更改为npcWhite并保存.我在Notepad ++上打开了DFM,发现它没有被保存
我已经在该属性上添加了STORED TRUE,它没有任何区别,仍然没有存储它.
但是,如果我关闭窗体并再次打开它,它会将ThemeColor显示为npcMainColor(0)而不是默认值为npcWhite
编辑:我已经打开了其他使用此组件的表单,可以看到之前该属性已被保存.打开并再次保存后,它将从DFM中删除.唯一仍然有效的是TuniPanel的后代,即TPanel.但它有完全相同的代码,它是全部复制和粘贴.
我已从课程中删除了这一行:
FThemeController: TNaharThemeController;
Run Code Online (Sandbox Code Playgroud)
现在组件正确保存DFM上的FThemeColor,按预期工作.为什么?