Сохранить свойства моего компонента при их изменении? - PullRequest
10 голосов
/ 03 января 2012

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

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

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

1 Ответ

15 голосов
/ 03 января 2012

Вы можете использовать точку расширения 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 охватывает эту предметную область, хотя и с несколько иной точки зрения, в разделе Хранение.и загрузка неопубликованных свойств раздел Руководство по написанию компонентов .

...