gpt4 book ai didi

delphi - 如何有条件地将属性保存到DFM或不保存?

转载 作者:行者123 更新时间:2023-12-03 15:23:30 25 4
gpt4 key购买 nike

我有一对组件,其中一个组件通过设置属性“附加”到另一个组件。例如...

type
TMain = class(TComponent)
...
published
property Default: Integer read FDefault write SetDefault;
end;

TSub = class(TComponent)
...
published
property Value: Integer read GetValue write SetValue;
property Main: TMain read FMain write SetMain;
end;

因此,在 TSub 的对象检查器中,用户将选择与其关联的 TMain

在子组件中,我有一个带有 getter 和 setter 的属性 Value。如果子组件的值设置为 0,则 getter 会从其附加的 TMain 获取 Default 属性。 .

function TSub.GetValue: Integer;
begin
if FValue = 0 then begin
if Assigned(FMain) then begin
Result:= FMain.Default;
end else begin
Result:= 0;
end;
end else begin
Result:= FValue;
end;
end;

这使得对象检查器(以及属性本身)从 main 返回默认值,而不是设置的 0 值。

我想要做的是确保当 TSub 组件的属性保存到 DFM 时,如果它是 0 (因此使用主程序中的默认值来代替)。目前,保存 DFM 后,来自主默认值的任何值都将保存在子值中,这不是我想要的。

当然,属性会被标记为 default 0; 例如,表示如果属性的值设置为 0,则该属性不会保存到DFM。但由于默认值可能会有所不同,因此我无法标记此属性的默认值(因为它期望定义默认值)。

如果已设置为 0 而是使用默认值,如何构建 TSub 组件以将此属性保存到 DFM从属性 getter 中的 main 开始?

最佳答案

property Value: Integer read GetValue write SetValue stored IsValueStored;

哪里

function TSub.IsValueStored: Boolean;
begin
Result := (FValue <> 0) or (FMain = nil);
end;

如果我猜对了。

关于delphi - 如何有条件地将属性保存到DFM或不保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20557342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com