Michał Niklas
Michał Niklas

Reputation: 54302

Problem with Splash Screen in Lazarus app

I am porting a Delphi application to FPC/Lazarus and this application shows info in splash screen. When unit has initialization section then this initialization section calls something like:

Splash.Info(unit_name)

This works in Delphi, but when I compiled this using FPC/Lazarus then I got exception when I create form with splash screen:

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

I found, that forms can be created after Application.Initialize; was called, so my workaround is to create splash form when ScreenInfo.Initialized=true. It works, but does not show all info. Is there any way to show splash form from unit initialization section, before Application.Initialize;?

Upvotes: 3

Views: 2199

Answers (2)

Michał Niklas
Michał Niklas

Reputation: 54302

In SplashScreen initialization code that is called for every string I want to show on this splash I finished with:

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

Upvotes: 0

Jeroen Wiert Pluimers
Jeroen Wiert Pluimers

Reputation: 24483

Apparantly the FPC/Lazarus implementation of the VCL differs enough from the Delphi VCL to not allow form initialization before the Application object has been initialized.

So the best you can do to make it work in both Delphi and FPC/Lazarus is either

  • Delay the initialization until you are sure that both the Delphi VCL and FPC/Lazarus VCL are ready for it
  • Duplicate your code with conditional defines to generate optimum implementations for both Delphi VCL and FPC/Lazarus VCL

--jeroen

Upvotes: 1

Related Questions