在Delphi中从.dfm文件中删除属性的快速方法

时间:2012-03-02 07:47:18

标签: regex delphi properties delphi-2006 dfm

我最近修改了我的一个组件,它发生了它不再使用它之前使用过的一个属性。

但是,这些属性在整个项目中都以多个.dfm文件编写。 现在,当我尝试编译项目时,我得到了 “读取错误。:属性< ...>不存在”

复杂的部分是属性值是二进制数据(存储在多行中),我不能用Delphi替换或notepad ++ regexp删除它(因为它们是基于单行的)。

所以我的问题是:

是否有任何第三方工具或方法可以轻松地从多个.dfm文件中删除属性?

4 个答案:

答案 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文件就可以了。