【发布时间】:2014-01-06 18:23:51
【问题描述】:
德尔福 XE2
我有以下自定义组件:
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 个这样的组件,以及所有类似的代码。只有在面板上(来自 TuniPanel)才能正常工作,该属性保持设计期间分配的值并在运行时正确检索它。
不知何故,该值未保存或属性未恢复。怎么抓?
编辑:
TNaharPalleteColor = (npcMainColor, npcColorA, npcColorB, npcColorC, npcColorD, npcWhite, npcBlack, npcUnknown, npcNone);
我已将 ThemeColor 的值更改为 npcWhite 并保存。我在记事本++上打开了DFM,发现它没有保存
我已经在属性上添加了 STORED TRUE 并且它没有任何区别,仍然没有将它存储在那里。
但是,如果我关闭表单并再次打开它,它会将 ThemeColor 显示为 npcMainColor (0),而不是默认的 npcWhite
编辑: 我已经打开了其他使用该组件的表单,并且可以看到之前该属性已被保存。当打开并再次保存时,它会从 DFM 中删除。唯一仍在工作的是 TuniPanel 的后代,即 TPanel。但是代码完全一样,都是复制粘贴。
我已经从课堂上删除了这一行:
FThemeController: TNaharThemeController;
组件现在可以在 DFM 上正确保存 FThemeColor,按预期工作。为什么?
【问题讨论】:
-
TNaharPalleteColor类型是如何定义的? -
“不知何故该值未保存或属性未恢复” - 没有“或”。您应该确定那里究竟发生了什么。这将使潜在错误区域减少一半。因此,在您保存表单后 - 在记事本中或在 Total Commander、Unreal Commander 等的某些文本查看器中打开 DFM 文件。在某些不会运行实际组件代码的被动文本查看器中。并查看是否保存了正确的颜色。
-
TUniPanel 是来自那个神秘的 TUniGUI 库吗?我不知道我们是否可以假设 UniGUI 是如何工作的。 t 在封闭源中是不寻常的
-
@Tlama 我已经更新了问题,现在我有了你可以看到的 TNaharPalleteColor。
-
@Arioch'The 谢谢纠正我。当您指出我并更新了问题时,我已经进行了测试。是的,它来自那个神秘的 uniGUI 库。 UniPanel 是 TWinControl 的后代。像该库中的所有其他组件一样。这个库一切正常,但是我决定实现我自己的组件版本,以防万一库支持消失而我需要自己去。
标签: delphi delphi-xe2 custom-component