Подтвердить что ты не робот

Поддерживать свойства моего компонента при их изменении?

У меня есть пользовательский компонент с некоторыми опубликованными свойствами, которые некоторое время использовались во многих проектах. Я хочу внести некоторые изменения в этот компонент, который требует удаления этих старых свойств и замены их новыми. Или иначе, я не обязательно удаляю свойства, но скажу, что просто просто изменил имя свойства от PropName до MyPropName. Ну, в следующий раз, когда любой проект, использующий этот компонент, будет открыт, он не сможет найти PropName.

Есть ли способ автоматизировать преобразование этого? Или это то, что люди должны будут сделать вручную? Каким будет правильный способ сохранения значений свойств компонента при изменении имен этих свойств?

И я имею в виду только код DFM, не обязательно внутри исходного кода.

4b9b3361

Ответ 1

Вы можете использовать точку расширения DefineProperties, чтобы помочь вам перенести ваши .dfm файлы.

type
  TMyComponent = class(...)
  private
    procedure ReadPropName(Reader: TReader);
  protected
    procedure DefineProperties(Filer: TFiler); override;
  published
    property MyPropName: string read ... write ...;
  end;

procedure TMyComponent.DefineProperties(Filer: TFiler);
begin
  inherited;
  Filer.DefineProperty('PropName', ReadPropName, nil, False);
end;

procedure TMyComponent.ReadPropName(Reader: TReader);
begin
  MyPropName := Reader.ReadString;
end;

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

Обратите внимание, что такой метод приводит к тому, что компонент может читать файлы .dfm, содержащие либо старое имя свойства, либо новое имя свойства, чтобы вы могли выполнить миграцию поэтапно, если хотите. После того как вы перенесли все ваши .dfm файлы, было бы целесообразно удалить такой код для удобства.

Документация Delphi охватывает эту предметную область, хотя и с несколько иной точки зрения, в разделе Сохранение и загрузка неопубликованных свойств в Руководство для авторов компонентов.