Быстрый способ удаления свойств из.dfm файлы в Delphi

недавно я изменил один из моих компонентов, и так получилось, что он больше не использует одно из свойств, которые он использовал раньше.

однако эти свойства записываются в несколько .dfm файлы по всему проекту. Теперь, когда я пытаюсь скомпилировать проект, я получаю - Ошибка чтения .: Свойство. не существует"

сложная часть заключается в том, что значение свойства является двоичными данными (хранится в нескольких строках), и я не могу просто удалить его с помощью Delphi replace или notepad++ regexp (поскольку они основаны на одной строке).

поэтому мой вопрос такой:

есть ли сторонние инструменты или способы, чтобы легко удалить свойства из нескольких .файлы ПДФ?

4 ответов


попробуйте этот инструмент Delphi DFM properties remover, работает со старыми версиями delphi, но, возможно, может помочь вам.


один из возможных подходов-изменить компонент так, чтобы он мог просто игнорировать эти свойства. Таким образом, вам не придется выслеживать их в каждом .файл 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;

джедай VCL содержит инструмент под названием DFMCleaner:

DFMCleaner-это инструмент для удаления неподдерживаемых свойств из DFMs. Если сохранить файл ДФМ в одной версии Delphi и хотите использовать его в более ранняя версия, скорее всего, есть некоторые неподдерживаемые свойства в это, генерируя ошибку, когда форма открывается в Delphi. Что еще хуже того, если dfm является частью пакета времени разработки, Delphi будет установите пакет без ошибок, но когда при попытке доступа к форме во время разработки (например, если форма используется редактором свойств), Delphi вместо этого генерирует AV.

Он расположен в jvcl-установить\devtools\DFMCleaner (проект с исходным кодом и пример конфигурационного файла)


в моем случае просто закрытие проекта и удаление файла DProj помогли.