最初に DPR でスプラッシュ スクリーンを作成しますが、 Application.CreateFormメソッドを使用しないでください。簡単なコードを次に示します。
begin
Application.Initialize;
SplashForm := TSplashForm.Create(nil);
try
SplashForm.FormStyle := fsStayOnTop;
SplashForm.Show;
Application.ProcessMessages;
Application.CreateForm(TForm14, Form14);
// Other Form Creation here . . . .
Application.Run;
finally
if assigned(SplashForm) then
SplashForm.Release;
end;
end.
次に、MainFrom (この場合は Form14) の Show イベント ハンドラー (または後で - 初期化が完了したとき) に次のコードを配置します。
SplashForm.Close;
SplashForm.Release;
SplashForm := nil;
(フォームで Free の代わりに Release を呼び出し、それを nil に割り当てて、DRP が release を再度呼び出さないようにします。DRP の release は、メインフォームの作成に失敗した場合に備えています。)
スプラッシュ フォームはFormStyle := fsStayOnTopであるため、メイン スレッドがブロックされたときにペイント メッセージが表示されないことは問題になりません。次に、メイン スレッドのブロックが解除されたら、更新メッセージを送信します (プログレス バーを変更するなど)。ただし、サード パーティのコンポーネント ベンダーに連絡して、メイン スレッドのブロックを停止するように依頼する必要があるという Gamecat の意見には同意します。
または、別のスレッドでサードパーティ コンポーネントを作成することもできます (視覚的でない場合は、少し難しくなります)。
これは、Application.MainFormOnTaskBarを true に設定しても機能します。