Проблема с Splash Screen в приложении Lazarus
-
18-09-2019 - |
Вопрос
Я переношу приложение Delphi в FPC/Lazarus, и это приложение показывает информацию на экране Splash. Когда единица имеет раздел инициализации, этот раздел инициализации вызывает что -то вроде:
Splash.Info(unit_name)
Это работает в Delphi, но когда я скомпилировал это с помощью FPC/Lazarus, я получил исключение, когда я создаю форму с помощью Splash Screen:
Failed to create win32 control, error 1407 : Cannot find window class
Я обнаружил, что формы могут быть созданы после Application.Initialize;
был вызван, поэтому мой обходной путь - создать форму всплеска, когда ScreenInfo.Initialized=true
. Анкет Это работает, но не показывает всю информацию. Есть ли способ показать форму всплеска из секции инициализации блока, перед Application.Initialize;
?
Решение 2
В коде инициализации Splashscreen, который требуется для каждой строки, которую я хочу показать в этом всплеске, с которым я закончил:
...
{$IFDEF FPC}
if not ScreenInfo.Initialized then
exit;
{$ENDIF}
if not splash_inititialized then begin
SplashScreen := TSplashScreen.Create(Application);
splash_inititialized := true;
...
Другие советы
Очевидно, что реализация FPC/Lazarus VCL отличается от Delphi VCL, чтобы не допустить инициализации формы до того, как объект приложения будет инициализирован.
Таким образом, лучшее, что вы можете сделать, чтобы он работал как в Delphi, так и в FPC/Lazarus, это либо
- Задержка инициализации, пока вы не уверены, что Delphi VCL и FPC/Lazarus VCL готовы к этому
- Дублируйте свой код с помощью условных определений для создания оптимальных реализаций как для Delphi VCL, так и для FPC/Lazarus VCL
-Джеруен