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

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

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

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

Итак, мой вопрос:

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

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('***********************',
 TIgnoreFormPropertyHelper.IgnoreIntegerProperty, nil, False);
end;


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

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

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


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

licensed under cc by-sa 3.0 with attribution.