我最近修改了我的一个组件,它发生了它不再使用它之前使用过的一个属性。
但是,这些属性在整个项目中都以多个.dfm文件编写。 现在,当我尝试编译项目时,我得到了 “读取错误。:属性< ...>不存在”
复杂的部分是属性值是二进制数据(存储在多行中),我不能用Delphi替换或notepad ++ regexp删除它(因为它们是基于单行的)。
所以我的问题是:
是否有任何第三方工具或方法可以轻松地从多个.dfm文件中删除属性?
答案 0 :(得分:9)
尝试使用此工具Delphi DFM properties remover
,适用于旧版本的delphi,但也许可以为您提供帮助。
答案 1 :(得分:4)
一种可能的方法是修改组件,使其能够简单地忽略这些属性。这样,您就不必在每个.dfm文件中搜索它们。
例如:
type
TIgnoreFormPropertyHelper = class
public
class procedure IgnoreBooleanProperty(Reader: TReader);
class procedure IgnoreIntegerProperty(Reader: TReader);
end;
{ TIgnoreFormPropertyHelper }
class procedure TIgnoreFormPropertyHelper.IgnoreBooleanProperty(Reader: TReader);
begin
Reader.ReadBoolean;
end;
class procedure TIgnoreFormPropertyHelper.IgnoreIntegerProperty(Reader: TReader);
begin
Reader.ReadInteger;
end;
type
TMyComponent = class(...)
....
protected
procedure DefineProperties(Filer: TFiler); override;
....
procedure TMyComponent.DefineProperties(Filer: TFiler);
begin
inherited;
Filer.DefineProperty('MyLegacyBooleanProperty',
TIgnoreFormPropertyHelper.IgnoreBooleanProperty, nil, False);
Filer.DefineProperty('MyLegacyIntegerProperty',
TIgnoreFormPropertyHelper.IgnoreIntegerProperty, nil, False);
end;
答案 2 :(得分:1)
Jedi VCL包含一个名为 DFMCleaner 的工具:
DFMCleaner是一种从DFM中删除不受支持的属性的工具。如果 你在一个版本的Delphi中保存一个dfm文件,并希望在一个版本中使用它 在早期版本中,可能存在一些不受支持的属性 它,在Delphi中打开表单时生成错误。什么是均匀的 更糟糕的是,如果dfm是设计时包的一部分,Delphi会 安装程序包时没有错误,但是当您尝试访问该表单时 在设计时(如果表单由属性编辑器使用,则为ex),Delphi 而是生成一个AV。
位于 jvcl-install \ devtools \ DFMCleaner (包含源代码和示例配置文件的项目)
答案 3 :(得分:0)
在我的情况下,只需关闭项目并删除DProj文件就可以了。