9

最近、コンポーネントの1つを変更しましたが、以前使用していたプロパティの1つが使用されなくなったことがあります。

ただし、これらのプロパティは、プロジェクト全体で複数の.dfmファイルに書き込まれます。これで、プロジェクトをコンパイルしようとすると、「読み取りエラー。:プロパティ<...>が存在しません」というメッセージが表示されます。

複雑な部分は、プロパティ値がバイナリデータ(複数行に格納されている)であり、Delphireplaceまたはnotepad++ regexp(単一行ベースであるため)で削除できないことです。

だから私の質問は次のようになります:

複数の.dfmファイルからプロパティを簡単に削除するサードパーティのツールや方法はありますか?

4

4 に答える 4

9

このツールを試してみてくださいDelphi DFM properties remover。古いバージョンのdelphiで動作しますが、おそらく役立つでしょう。

于 2012-03-02T08:23:37.613 に答える
4

考えられるアプローチの1つは、これらのプロパティを単純に無視できるようにコンポーネントを変更することです。そうすれば、すべての.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;
于 2012-03-02T09:12:24.423 に答える
1

Jedi VCLには、DFMCleanerと呼ばれるツールが含まれています。

DFMCleanerは、サポートされていないプロパティをDFMから削除するためのツールです。あるバージョンのDelphiでdfmファイルを保存し、それを以前のバージョンで使用したい場合、サポートされていないプロパティがいくつかあり、フォームをDelphiで開いたときにエラーが発生する可能性があります。さらに悪いことに、dfmがデザイン時パッケージの一部である場合、Delphiはエラーなしでパッケージをインストールしますが、デザイン時にフォームにアクセスしようとすると(たとえば、フォームがプロパティエディタで使用されている場合)、Delphi代わりにAVを生成します。

これは、jvcl-install \ devtools \ DFMCleaner(ソースコードとサンプル構成ファイルを含むプロジェクト)にあります。

于 2012-03-04T18:15:38.760 に答える
0

私の場合、プロジェクトを閉じてDProjファイルを削除するだけで役に立ちました。

于 2015-06-09T10:34:45.473 に答える