Вопрос

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

Splash.Info(unit_name)

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

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

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

Это было полезно?

Решение 2

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

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

Другие советы

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

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

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

-Джеруен

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top