Problema com tela Splash no aplicativo Lazarus
-
18-09-2019 - |
Pergunta
Estou portando um aplicativo Delphi para FPC/Lazarus e este aplicativo mostra informações na tela Splash. Quando a unidade possui a seção de inicialização, esta seção de inicialização chama algo como:
Splash.Info(unit_name)
Isso funciona em Delphi, mas quando eu compilei isso usando FPC/Lazarus, obtive uma exceção quando crio o formulário com a tela Splash:
Failed to create win32 control, error 1407 : Cannot find window class
Eu descobri que os formulários podem ser criados depois Application.Initialize;
foi chamado, então minha solução alternativa é criar forma de respingo quando ScreenInfo.Initialized=true
. Funciona, mas não mostra todas as informações. Existe alguma maneira de mostrar formulário de respingo na seção de inicialização da unidade, antes Application.Initialize;
?
Solução 2
No código de inicialização do SplashScreen, que é chamado para todas as strings que eu quero mostrar neste respingo com o qual terminei:
...
{$IFDEF FPC}
if not ScreenInfo.Initialized then
exit;
{$ENDIF}
if not splash_inititialized then begin
SplashScreen := TSplashScreen.Create(Application);
splash_inititialized := true;
...
Outras dicas
Aparentemente, a implementação de FPC/Lazarus do VCL difere o suficiente do Delphi VCL para não permitir a inicialização da forma antes que o objeto de aplicação seja inicializado.
Portanto, o melhor que você pode fazer para fazê -lo funcionar em Delphi e FPC/Lazarus é
- Atrase a inicialização até ter certeza de que o Delphi VCL e o FPC/Lazarus VCL estão prontos para isso
- Duplique seu código com define condicional para gerar implementações ideais para Delphi VCL e FPC/Lazarus VCL
--Jeroen