【问题标题】:A quick way to remove properties from .dfm files in Delphi在 Delphi 中从 .dfm 文件中删除属性的快速方法
【发布时间】:2012-03-02 07:47:17
【问题描述】:

我最近修改了我的一个组件,碰巧它不再使用它以前使用的属性之一。

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

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

所以我的问题是:

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

【问题讨论】:

  • 如果你打开你的dfm并再次保存,无效的属性不会被删除吗?看起来很奇怪..
  • @teran 问题首先是打开 .dfm 文件。流式代码将反对 .dfm 文件读取点。
  • @DavidHeffernan 我认为 IDE 要求使用二进制字段“忽略”或“删除”不正确的属性。例如:我将TAdvGlowButton(来自TMS)放在表单中,然后在我以文本形式打开表单(alt+f12)后替换表单类中的字段定义(button1 : TButton),并将TAdvGlowButton替换为@987654324 @ (当然 TMS 按钮比标准按钮具有更多的属性)。因此,现在 DFM 具有无效属性。如果我尝试打开表单,IDE 会询问“忽略错误并继续?”,如果我按 Ok,则会删除无效属性。
  • @teran 也许我还记得过去。我总是让我的组件能够默默地处理这一切。

标签: regex delphi properties delphi-2006 dfm


【解决方案1】:

试试这个工具Delphi DFM properties remover,它适用于旧版本的delphi,但也许可以帮助你。

【讨论】:

  • 谢谢你,这就像一个魅力,做它应该做的。不知道为什么我无法谷歌它
【解决方案2】:

一种可能的方法是修改您的组件,使其能够简单地忽略这些属性。这样您就不必在每个 .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;

【讨论】:

    【解决方案3】:

    Jedi VCL 包含一个名为 DFMCleaner 的工具:

    DFMCleaner 是一种从 DFM 中删除不受支持的属性的工具。如果 您将 dfm 文件保存在一个版本的 Delphi 中,并希望在 早期版本,可能有一些不受支持的属性 它,在 Delphi 中打开表单时会产生错误。甚至是什么 更糟糕的是,如果 dfm 是设计时包的一部分,Delphi 将 安装软件包时没有错误,但是当您尝试访问表单时 在设计时(如果表单由属性编辑器使用,则为前),Delphi 而是生成一个 AV。

    它位于jvcl-install\devtools\DFMCleaner(带有源代码和示例配置文件的项目)

    【讨论】:

      【解决方案4】:

      就我而言,只需关闭项目并删除 DProj 文件即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多