Pregunta

Estoy portando una aplicación Delphi a FPC/Lazarus y esta aplicación muestra información en la pantalla Splash. Cuando la unidad tiene una sección de inicialización, esta sección de inicialización llama algo como:

Splash.Info(unit_name)

Esto funciona en Delphi, pero cuando compilé esto usando FPC/Lazarus, obtuve una excepción cuando creo formulario con pantalla Splash:

Failed to create win32 control, error 1407 : Cannot find window class

Encontré que esas formas se pueden crear después Application.Initialize; fue llamado, por lo que mi solución es crear una forma de salpicadura cuando ScreenInfo.Initialized=true. Funciona, pero no muestra toda la información. ¿Hay alguna forma de mostrar el formulario de salpicaduras de la sección de inicialización de la unidad? Application.Initialize;?

¿Fue útil?

Solución 2

En el código de inicialización de Splashscreen que se llama para cada cadena que quiero mostrar en esta salpicadura con la que terminé:

...
{$IFDEF FPC}
if not ScreenInfo.Initialized then
    exit;
{$ENDIF}
if not splash_inititialized then begin
  SplashScreen := TSplashScreen.Create(Application);
  splash_inititialized := true;
  ...

Otros consejos

Aparentemente, la implementación de FPC/Lázaro del VCL difiere lo suficiente de Delphi VCL para no permitir la inicialización de la forma antes de que se haya inicializado el objeto de aplicación.

Entonces, lo mejor que puede hacer para que funcione tanto en Delphi como en FPC/Lazarus es

  • Retrase la inicialización hasta que esté seguro de que tanto Delphi VCL como FPC/Lazarus VCL están listos para ello
  • Duplicar su código con define condicional para generar implementaciones óptimas para Delphi VCL y FPC/Lazarus VCL

--Jeroen

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top