2016-05-16 42 views
0

让我们举一个包含名为ColumnWidth的属性的组件的例子,其默认值为50.在设计时,我将该值更改为100,然后编译该应用程序。如何获取组件属性的初始值?

现在,我想在我的组件内部实现一个Reset to default(弹出式菜单)按钮,它将初始化ColumnWidth为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; 

在组件方法下,如何存储初始值ColumnWidth

+1

为什么不到处使用常量? –

+0

几个星期前,你还没有回答同样的问题,你还想加入@RobKennedy的评论工作吗? –

+0

对于之前的“类似”问题,我想到了同样的想法,但从我的错误。我认为我需要从设计时间开始,但实际上有必要在实时进行。现在我认为这个问题更加清楚。编程是一种爱好,而不是一份工作,所以互联网和Stackoverflow是我唯一的培训师。如果有时我会提出愚蠢的问题,谢谢你的理解。 – REALSOFO

回答

1

值100在组件内部不可用,因为它存储在组件驻留的窗体,框架或数据模块的DFM资源中。唉,从DFM中再次读取这个值可能会很乏味(尽管可能)。因此,您最好在FormCreate事件期间将值保存在表单字段中,稍后使用它将该组件属性重置为保存的值。

+0

我相信'FColumnWidthDef'就是出于这个目的。 –