質問

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