3

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;か?

4

2 に答える 2

1

明らかに、VCL の FPC/Lazarus 実装は Delphi VCL とは大きく異なり、Application オブジェクトが初期化される前にフォームを初期化することはできません。

したがって、Delphi と FPC/Lazarus の両方で動作させるためにできる最善の方法は、次のいずれかです。

  • Delphi VCL と FPC/Lazarus VCL の両方の準備が整っていることを確認するまで、初期化を遅らせます。
  • 条件定義を使用してコードを複製し、Delphi VCL と FPC/Lazarus VCL の両方に最適な実装を生成します

--jeroen

于 2010-01-06T10:07:23.407 に答える
0

このスプラッシュに表示するすべての文字列に対して呼び出される SplashScreen 初期化コードで、次のように仕上げました。

...
{$IFDEF FPC}
if not ScreenInfo.Initialized then
    exit;
{$ENDIF}
if not splash_inititialized then begin
  SplashScreen := TSplashScreen.Create(Application);
  splash_inititialized := true;
  ...
于 2010-01-11T06:06:16.920 に答える