我有一个自定义组件与一些已发布的属性,已经在很多项目中使用了一段时间.我想对这个组件进行一些特别的更改,需要删除这些旧的属性并用新的属性替换它们.否则,我不一定要删除属性,但是我们只是简单地将一个属性的名称从PropName更改为MyPropName.那么下次打开使用该组件的项目时,它将无法找到PropName.
@H_301_7@解决方法
您可以使用
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文件,那么为了整洁起见,值得删除这些代码.
尽管从Component Writer’s Guide Storing and Loading Unpublished Properties部分的角度来看,Delphi文档涵盖了这个主题领域,尽管有一点不同.