Jer*_*dge 10 delphi components properties delphi-7
我有一个自定义组件,其中包含一些已在许多项目中使用过一段时间的已发布属性.我想对此组件进行一些特殊更改,这需要删除这些旧属性并将其替换为新属性.或以其他方式,我不一定移除属性,但让我们说,我只是简单地从更改属性的名称PropName来MyPropName代替.好吧,下次打开使用该组件的任何项目时,它将无法找到PropName.
有没有办法自动转换这个?或者这是人们必须手动完成的事情?当这些属性的名称发生变化时,维护组件属性值的正确方法是什么?
我的意思是只在DFM代码中,不一定在源代码中.
Dav*_*nan 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;
Run Code Online (Sandbox Code Playgroud)
这将允许您的新组件使用旧属性名称读取旧的.dfm文件.再次写入.dfm文件时,将使用新的属性名称.
请注意,这种技术使组件能够读取包含旧属性名称或新属性名称的.dfm文件,以便您可以根据需要逐步迁移.一旦迁移了所有.dfm文件,那么为了整洁而删除这些代码是值得的.
Delphi文档在" 组件编写者指南"的" 存储和加载未发布的属性"部分中介绍了此主题区域,尽管从略有不同的角度来看.