Delphi 如何获取组件属性的初始值?

Delphi 如何获取组件属性的初始值?,delphi,components,Delphi,Components,让我们以一个组件为例,该组件包含一个名为ColumnWidth的属性,默认值为50。在设计期间,我将值更改为100,然后编译应用程序 现在,我想在我的组件中实现一个重置为默认值(弹出菜单)按钮,它将列宽初始化为值100,以防用户同时更改它 TMyComponent = class(TComponent) private FVirtualStringTree: TVirtualStringTree; FColumnWidth: Integer; FColumnWidth

让我们以一个组件为例,该组件包含一个名为
ColumnWidth
的属性,默认值为50。在设计期间,我将值更改为100,然后编译应用程序

现在,我想在我的组件中实现一个
重置为默认值
(弹出菜单)按钮,它将
列宽
初始化为值100,以防用户同时更改它

TMyComponent = class(TComponent)
  private
    FVirtualStringTree: TVirtualStringTree;
    FColumnWidth: Integer;
    FColumnWidthDef: Integer;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure ResetToDefault;
  published
    property ColumnWidth: Integer read FColumnWidth write SetColumnWidth  default 50;
    property VirtualStringTree: TVirtualStringTree read FVirtualStringTree  write FVirtualStringTree; 
  end;

constructor TMyComponent.Create(AOwner: TComponent);
begin
  inherited;
  FColumnWidth:= 50;
end;

destructor TMyComponent.Destroy;
begin
  inherited;
end;

procedure TMyComponent.SetColumnWidth(const Value: Integer);
begin
  if FColumnWidth <> Value then FColumnWidth:= Value;
end;

procedure TMyComponent.ResetToDefault;
begin
  ColumnWidth:= FColumnWidthDef;
end;
TMyComponent=class(TComponent)
私有的
FVirtualStringTree:TVirtualStringTree;
FColumnWidth:整数;
FColumnWidthDef:整数;
公众的
构造函数创建(AOwner:TComponent);推翻
毁灭者毁灭;推翻
程序重置默认值;
出版
属性ColumnWidth:整数读取FColumnWidth写入设置ColumnWidth默认值50;
属性VirtualStringTree:TVirtualStringTree读取FVirtualStringTree写入FVirtualStringTree;
结束;
构造函数TMyComponent.Create(所有者:TComponent);
开始
继承;
F柱宽:=50;
结束;
破坏器TMY组件。破坏;
开始
继承;
结束;
过程TMyComponent.SetColumnWidth(常量值:整数);
开始
如果FColumnWidth值,则FColumnWidth:=值;
结束;
程序TMyComponent.ResetToDefault;
开始
ColumnWidth:=FColumnWidthDef;
结束;

在component方法下,如何存储
ColumnWidth
的初始值

值100在组件内部不可用,因为它存储在组件所在的表单、帧或数据模块的DFM资源中。唉,以后再从DFM读取该值可能会变得单调乏味(尽管可能)。因此,您最好在
FormCreate
事件期间将该值保存在表单字段中,稍后使用该值将该组件属性重置为保存的值。

为什么不在所有位置使用常量?几周前您对同一问题的答案不是,随着@RobKennedy的评论工作的增加,正如你所希望的那样?对于之前的“类似”问题,我也有同样的想法,但我犯了一个错误。我以为我需要从设计时开始做,但事实上,在实时中做是必要的。现在我觉得这个问题更清楚了。编程是一种爱好,而不是工作,所以互联网和Stackoverflow是我唯一的培训师。感谢您理解我有时提出的愚蠢问题。我相信
FColumnWidthDef
就是为了这个目的而存在的。