更改时保持组件的属性?

时间:2012-01-02 21:50:16

标签: delphi properties components delphi-7

我有一个自定义组件,其中包含一些已发布的属性,这些属性已在许多项目中使用了一段时间。我想对此组件进行一些特殊更改,这需要删除这些旧属性并将其替换为新属性。或者,我不一定要删除属性,但是我只想简单地将属性的名称从PropName更改为MyPropName。好吧,下次打开使用该组件的任何项目时,它将无法找到PropName

有没有办法自动转换这个?或者这是人们必须手动完成的事情?当这些属性的名称发生变化时,维护组件属性值的正确方法是什么?

我的意思是在DFM代码中,不一定在源代码中。

1 个答案:

答案 0 :(得分:15)

您可以使用DefineProperties扩展点来帮助迁移.dfm文件。

type
  TMyComponent = class(...)
  private
    procedure ReadPropName(Reader: TReader);
  protected
    procedure DefineProperties(Filer: TFiler); override;
  published
    property MyPropName: string read ... write ...;
  end;

procedure TMyComponent.DefineProperties(Filer: TFiler);
begin
  inherited;
  Filer.DefineProperty('PropName', ReadPropName, nil, False);
end;

procedure TMyComponent.ReadPropName(Reader: TReader);
begin
  MyPropName := Reader.ReadString;
end;

这将允许您的新组件使用旧属性名称读取旧的.dfm文件。再次写入.dfm文件时,将使用新的属性名称。

请注意,这种技术会使组件能够读取包含旧属性名称或新属性名称的.dfm文件,以便您可以根据需要逐步迁移。一旦迁移了所有的.dfm文件,那么为了整洁而删除这些代码是值得的。

Delphi文档涵盖了Storing and Loading Unpublished PropertiesComponent Writer's Guide部分,虽然视角略有不同,但涵盖了这一主题领域。