Delphiアプリケーションの初期化で多くのフォームを作成するのにキューを使用していますが、正しく動作しません。コードFiremonkeyのキューが進行状況バーを更新しない
TThread.Queue(TThread.CurrentThread,
procedure()
begin
Application.CreateForm(TForm1, form1);
Application.CreateForm(TForm2, form2);
Application.CreateForm(TForm3, form3);
.....
Application.CreateForm(TForm9, form9);
Application.CreateForm(TDatamodule1, datamodule1);
end);
のフラグメントベロー
私は、ProgressBarとラベルで作成の進行状況を表示するように願っています。たとえば、次のように 各TFORMは最終的に作成し、私はTProgressBar.Value=TProgressBar.Value + 10
を設定し、次のフォームのためのlabel.text
を更新するために: 'ロードForm2を...'
apllicationは、WindowsとAndroidで動作します。私は両方のプラットフォームで同じ動作を見て、画面がフリーズし、プロセスの終了時に「ロード完了」を更新します。私は間違っているの?
注:前回、私は同期を使用していたが、私はのTThreadコンテキスト上のフォームを作成することができませんでした、その後、同期は良いアイデアではありませんでしたグローバルなVARをForm1と更新ラベルを、アクセスする必要がありました。
完全なコード、
TfrmSplash.create(Sender:TObject);
begin
TThread.Queue(TThread.CurrentThread,
procedure()
begin
Application.CreateForm(TForm1, form1);
TProgressBar.Value=TProgressBar.Value + 10
Label1.text:='Loading form2';
Application.CreateForm(TForm2, form2);
TProgressBar.Value=TProgressBar.Value + 10
Label1.text:='Loading form3';
Application.CreateForm(TForm3, form3);
TProgressBar.Value=TProgressBar.Value + 10
Label1.text:='Loading form4';
.....
Application.CreateForm(TForm9, form9);
TProgressBar.Value=TProgressBar.Value + 10
Label1.text:='Loading data';
Application.CreateForm(TDatamodule1, datamodule1);
TProgressBar.Value:=100
Label1.text:='100% complete';
Sleep(200);
frmSplash.hide;
Form1.show;
end);
end;
XEは、AndroidやFireMonkeyのをサポートしていません。使用しているバージョンを知ることが有用なことがあります。そのような詳細については正確にしてください。私はあなたの最後の質問でこれの多くを説明しました。これに留意することが重要です。質問については、このコードが実行されるコンテキストを明確に把握する必要があります。したがって、[mcve]を提供してください。 –
あなたは間違っています、FiremonkeyとAndroidはDelphi Xe2以降サポートされています。コードはxe7、xe5、xe2で動作します。私はコードを改善して助けてくれます。 –
XEはXE2より前のバージョンです。それはWindowsのみを対象としています。私たちには[mcve]が必要です。 1つを入力してください。 –