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;?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top