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
就是为了这个目的而存在的。