Я пишу пакет Delphi, который предоставляет новый пользовательский объект TGraphic, позволяющий читать новый формат изображения в таких компонентах VCL, как TImage.
Первоначально я разработал этот пакет с помощью RAD Studio XE7, и он хорошо работал. Однако недавно я перешел на более новую версию компилятора RAD Studio, и хотя мой пакет продолжает нормально работать в этой новой версии, я заметил странную ошибку, которая никогда не появлялась раньше.
У меня есть форма с несколькими компонентами, некоторые из которых являются компонентами TImage. Сразу после открытия среды IDE, когда я впервые открываю свой проект во время разработки, все компоненты TImage, содержащие мой пользовательский компонент TGraphic, теряют свое содержимое. Если я закрою, а затем снова открою проект, изображения снова появятся, и ошибка больше не произойдет, пока я не закрою и не открою свою IDE.
Я покопался в своем коде, чтобы понять, что может вызвать проблему. Чтобы зарегистрировать свой пользовательский компонент TGraphic, я использую раздел инициализации класса, в котором я написал следующий код:
initialization
begin
Vcl.Graphics.TPicture.RegisterFileFormat('svg', 'Scalable Vector Graphics', TWSVGGraphic);
end;
Однако я обнаружил, что, начиная с версии компилятора XE8, конструктор TImage вызывается перед моим разделом инициализации, вызывая, таким образом, очевидно вышеупомянутую проблему. На все версии компилятора, начиная с XE8, влияют, но эта ошибка никогда не возникала на XE7 или более ранних версиях. Так что с XE8 что-то изменилось.
Вот мои вопросы:
- Правильно ли я использую для регистрации свой пользовательский графический класс?
- Если нет, как правильно это сделать?
- Как выглядит что-то иное после XE8, каков новый правильный способ регистрации моего графического компонента?
- Кто-нибудь еще сталкивался с такой же проблемой? Как он это решил?
- Это может быть новая ошибка RAD Studio, или проблема скорее на моей стороне?