2010-01-05 3 views
3

Я портирую приложение Delphi на FPC/Lazarus, и это приложение отображает информацию в заставке. Когда устройство имеет секцию инициализации, то этот раздел инициализации вызывает что-то вроде:Проблема с заставкой экрана в приложении Lazarus

Splash.Info(unit_name) 

Это работает в Delphi, но когда я собрал это с помощью FPC/Lazarus, то я получил исключение, когда я создаю форму с заставкой:

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

Я нашел, что формы могут быть созданы после того, как был вызван Application.Initialize;, поэтому моим обходным путем является создание формы всплеска, когда ScreenInfo.Initialized=true. Он работает, но не показывает всю информацию. Есть ли способ показать форму всплеска из секции инициализации блока, до Application.Initialize;?

ответ

0

В коде инициализации SplashScreen, который вызывается для каждой строки, которую я хочу показать на этом всплеске, я закончил с:

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

Очевидно, что реализация VCL в FPC/Lazarus достаточно отличается от Delphi VCL, чтобы не допустить инициализацию формы до того, как объект приложения был инициализирован.

Так что лучшее, что вы можете сделать, чтобы заставить его работать как в Delphi и FPC/Lazarus либо

  • Задержка инициализации, пока вы не уверены, что и Delphi VCL и FPC/Lazarus VCL готовы к этому
  • Дублирование кода с условным Определяет для создания оптимальных реализаций как для Delphi VCL и FPC/Lazarus VCL

--jeroen

Смежные вопросы