Быстрый способ удалить свойства из файлов .dfm в Delphi - PullRequest
9 голосов
/ 02 марта 2012

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

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

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

Поэтому мой вопрос будет:

Существуют ли какие-либо сторонние инструменты или способылегко удалить свойства из нескольких файлов .dfm?

Ответы [ 4 ]

9 голосов
/ 02 марта 2012

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

4 голосов
/ 02 марта 2012

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

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

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

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

0 голосов
/ 09 июня 2015

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

...