2016-03-29 16 views
-2

Firmonkey Multiデバイスプロジェクトの他のフォームの上に表示するポップアップロードスクリーンを作成しました。今、私はロード・スクリーンがバックグラウンド・フォームで行うことで更新されないという問題を抱えています。これをどうすれば解決できますか?以下のコードでFiremonkeyはバックグラウンドで処理するフォームDelphi 10 Seattle

は、私が試したものの一例である:私はいくつかのマルチスレッドを行う必要があると思い

procedure TForm1.Button1Click(Sender: TObject); 
var 
    loadScreen:TfrmLoadScreen; 
begin 
    loadScreen := TfrmLoadScreen.Create(nil); 
    loadScreen.ShowModal(
    procedure(ModalResult: TModalResult) 
    var 
     i:Integer; 
    begin 
     for i := 0 to 200 do 
     begin 
     loadScreen.CurrentItem := i; 
     loadScreen.TextMessage := 'Item:' + loadScreen.CurrentItem.ToString; 
     Sleep(100); 
     end; 
     ModalResult := mrCancel; 
    end); 
end; 

が、私はすべての経験がこれを行う必要はありません!私はロードスクリーンのためにこれをどうすればいいですか?

私も次のことを試してみたが、フォームが示されません:あなたの最初のコードブロックで

procedure TForm1.Button1Click(Sender: TObject); 
var 
    loadScreen:TfrmLoadScreen; 
begin 
    loadScreen := TfrmLoadScreen.Create(nil); 
    loadScreen.OnShow := FormShowLoadScreen; 
    loadScreen.Show; 
end; 

procedure TForm1.FormShowLoadScreen(Sender: TObject); 
var 
    i:Integer; 
    loadScreen:TfrmLoadScreen; 
begin 
    loadScreen := TfrmLoadScreen(Sender); 
    for i := 0 to 200 do 
    begin 
    loadScreen.CurrentItem := i; 
    Sleep(100); 
    end; 
    loadScreen.Close; 
end; 
+0

モーダルフォームを閉じるには、ゼロ以外の値にそのModalResultプロパティを設定します。 – RBA

+0

@RBAはい、そうです。しかしそれでも私の問題は解決しません。私のロードスクリーンのフォームは更新されません! – Remi

+0

フォームが閉じられた後、コールバックメソッドは**と呼ばれます。閉鎖されたフォームにあなたが行ったことは誰にも見えません。 –

答えて

1

loadscreen.modalresultが以外に設定された後、Annonymousの方法のみと呼ばれています0これは決して起こらない(見ることができる)

2つ目のブロックでは、2つの異なる負荷画面インスタンスがあります。彼らは同じものではありません。 FormShowLoadScreenハンドラは、最初にloadscreen.showの後に呼び出されますが、2つ目のloadscreenが作成され、独自の表示が行われます。実際、これは非常に速く起こるかもしれません、あなたはそれが起こるのを見ません。

本当にDelphiマルチスレッドの詳細を知る必要があります。 「進捗状況」フォームを表示するには、ロードスクリーンフォームが表示された直後に開始される別のスレッドのsynchronizeイベント内に処理(表示更新)を配置する必要があります。

実際、FMXでは、アノニマススレッドを開始する前にアニメーションインジケータを表示し、スレッド終了ブロックで再び非表示にする方が簡単です。

参照マルコ・カントゥのブログ記事ここBackground Operations on Delphi Android, with Threads and Timers

+0

本当に答えではないにもかかわらず、答えとしてマークしてくれてありがとう、それは単なる応答でした。 – nolaspeaker

関連する問題