Быстрый способ удаления свойств из.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 (проект с исходным кодом и пример конфигурационного файла)