我正在将Delphi应用程序移植到FPC/Lazarus,此应用程序显示了Splash屏幕中的信息。当单元具有初始化部分时,此初始化部分称为以下内容:

Splash.Info(unit_name)

这在Delphi中起作用,但是当我使用FPC/Lazarus对此进行编译时,当我使用Splash屏幕创建表单时,我会得到异常:

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;
  ...

其他提示

显然,VCL的FPC/Lazarus实现与Delphi VCL有足够的不同,在初始化应用程序对象之前不允许形式初始化。

因此,您可以做的最好的方法使其在Delphi和FPC/Lazarus中都可以使用

  • 延迟初始化,直到您确定Delphi VCL和FPC/Lazarus VCL都准备好了
  • 用条件定义复制代码以生成Delphi VCL和FPC/Lazarus VCL的最佳实现

- 杰罗恩

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top