Проблема с заставкой в ​​приложении Lazarus - PullRequest
3 голосов
/ 05 января 2010

Я портирую приложение Delphi на FPC / 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;?

Ответы [ 2 ]

1 голос
/ 06 января 2010

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

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

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

- Йерун

0 голосов
/ 11 января 2010

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

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