Delphi - Как правильно зарегистрировать пользовательский графический класс, начиная с Rio 10.3.3

Итак, я разрабатываю графическую библиотеку, предоставляющую пользовательский формат изображения SVG, который можно использовать в TPicture или любом компоненте VCL, поддерживающем графическое изображение, например, TImage. Я написал и поддерживал свой пакет библиотеки, начиная с версии компилятора XE7, и мой код обратно совместим до версии XE2.

Чтобы объявить свой собственный графический формат в среде IDE, я вызываю следующий код из раздела initialization моего графического класса.

Vcl.Graphics.TPicture.RegisterFileFormat('svg', 'Scalable Vector Graphics', TWSVGGraphic);

Однако, похоже, это больше не работает с последней версии RAD Studio 10.3.3 Rio. Я уже сталкивался с подобной проблемой в прошлом, для которой я мог найти решение: Delphi - Как правильно зарегистрировать графический класс начиная с XE8?

Итак, видимо, Embarcadero изменила правила, начиная с версии 10.3.3 Rio. Снова. Мой графический класс больше не регистрируется правильно, начиная с этой версии. Иногда это так, иногда это не так. Например, когда я открываю свою IDE в первый раз, это не так. Когда я пытаюсь отладить свой пакет во время разработки, это так. Когда я пытаюсь запустить проект, иногда получается, иногда нет.

Кто-нибудь сталкивался с подобной проблемой? Изменились ли правила для раздела initialization в самых последних версиях компилятора? Наконец, что, черт возьми, не так с моим кодом?

Или, может быть, я до сих пор не понимаю, как правильно зарегистрировать графический класс в Delphi, даже спустя столько лет. В этом случае я был бы очень признателен, если бы кто-нибудь объяснил мне, как правильно зарегистрировать графический класс, чтобы никогда больше не сталкиваться с такой проблемой в будущем.


person Jean-Milost Reymond    schedule 27.12.2019    source источник
comment
Поскольку многим понравился этот пост, но, к сожалению, ни у кого нет решения, я делаю вывод, что я не единственный, кто сталкивается с такой проблемой. По этой причине я открыл отчет о проблеме на веб-сайте Embarcadero: quality.embarcadero.com/browse/RSP. -27341   -  person Jean-Milost Reymond    schedule 30.12.2019
comment
Где вы на самом деле вызываете Vcl.Graphics.TPicture.RegisterFileFormat? Вы уверены, что он уже вызван, когда вы пытаетесь его протестировать? Вы уверены, что это правильное место для вызова?   -  person Niki    schedule 31.12.2019
comment
Как я уже сказал: чтобы объявить свой собственный графический формат в IDE, я вызываю следующий код из раздела инициализации моего графического класса. Насколько мне известно, это хорошее место для вызова функций регистрации, поскольку предполагается, что раздел инициализации вызывается один раз при инициализации библиотеки DLL пакета. По крайней мере, до первой версии Рио 10.3 он работал хорошо, но кажется, что что-то изменилось с Рио 10.3.3 (возможно, даже с 10.3.2). Но также, как я уже сказал: возможно, я до сих пор не понимаю, как правильно зарегистрировать графический класс в Delphi. Любая помощь приветствуется, если это так.   -  person Jean-Milost Reymond    schedule 31.12.2019
comment
Вы не можете связать свой графический класс с проектом, инициализация — единственное место для вызова RegisterFileFormat.   -  person Sertac Akyuz    schedule 31.12.2019
comment
И это место называется для TJPEGImage, TPngImage и TGIFImage.   -  person Sertac Akyuz    schedule 31.12.2019
comment
Я сделал это в 10.4.1 TPicture.RegisterFileFormat('XYZ', 'Not a format', TImprovedJPEG), чтобы обойти ошибку в TJpegImage.   -  person Alister    schedule 04.03.2021