2010-01-05 11 views
3

Je suis en train de porter une application Delphi sur FPC/Lazarus et cette application affiche des informations dans l'écran de démarrage. Lorsque l'unité est la section d'initialisation alors cette section d'initialisation appelle quelque chose comme:Problème avec l'écran de démarrage dans l'application Lazarus

Splash.Info(unit_name) 

Cela fonctionne à Delphes, mais quand je compilé cela en utilisant CCPF/Lazarus je suis exception lorsque je crée sous forme avec l'écran de démarrage:

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

J'ai trouvé, que les formulaires peuvent être créés après Application.Initialize; a été appelé, donc ma solution de contournement est de créer un formulaire splash lorsque ScreenInfo.Initialized=true. Cela fonctionne, mais ne montre pas toutes les informations. Existe-t-il un moyen de montrer la forme d'éclaboussure de la section d'initialisation d'unité, avant Application.Initialize;?

Répondre

0

Dans le code d'initialisation de SplashScreen qui est appelé pour chaque chaîne que je veux montrer sur cette éclaboussure j'ai fini avec:

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

Apparemment, l'implémentation FPC/Lazarus de la VCL diffère suffisamment de la VCL Delphi pour ne pas autoriser l'initialisation de formulaire avant l'initialisation de l'objet Application.

Donc, la meilleure que vous pouvez faire pour le faire fonctionner dans Delphi et FPC/Lazarus est soit

  • Retard de l'initialisation jusqu'à ce que vous êtes sûr que les deux VCL Delphi et FPC/Lazarus VCL y sont prêts
  • dupliquer votre code avec pour générer des définitions conditionnelles pour les implémentations optimales VCL Delphi et FPC/Lazarus VCL

--jeroen

Questions connexes