2012-02-26 4 views
2

更新中のプログレスバーがWindowsに表示されます。 OSXではプログレスバーが表示されますが、プログレスバーはシフトされません。Firemonkey OSXアップデートプログレスバー(ダウンロード中)

以下のコードを参照してください。

procedure TForm1.Button1Click(Sender: TObject); 
var 
    m : TMemoryStream; 
begin 

    IdHTTP1.OnWork:= HttpWork; 
    m := TMemoryStream.Create; 

    IdHTTP1.Get('http://www.example.com/pictures.zip', m); 

    m.SaveToFile('/users/demo/pictures.zip'); 
    m.Free; 

end; 

procedure TForm1.HttpWork(ASender: TObject; AWorkMode: TWorkMode; 
    AWorkCount: Int64); 
var 
    Http: TIdHTTP; 

    ContentLength: Int64; 

    Percent: Integer; 
begin 
    Http := TIdHTTP(ASender); 

    ContentLength := Http.Response.ContentLength; 

    Percent := 100 * AWorkCount div ContentLength; 

    ProgressBar1.Value := Percent; 

end; 

OSXでどのようにプログレスバーを更新できますか?

+0

HttpWorkハンドラは呼び出されていますか?それ以外の場合は、プログレスバーではなくHTTPコンポーネントに問題があり、質問を繰り返すことでより良い回答を得ることができます。 –

答えて

2

は、ここで私は私のコードで持っているものだし、それはWindowsとMacの両方で動作します:

Percent := 100 * AWorkCount div ContentLength; 
frmDownloadProgress.ProgressBar1.Value := Percent; 
Application.ProcessMessages; 

Application.ProcessMessages TIdHTTPコンポーネントは、メインスレッド上にある場合は、プログレスバーを更新するための鍵です。

+3

+1「TIdHTTPを分離されたスレッドで使用し、何が進捗しているかをよく聞く」のようなものは良いアドバイスでした( – ComputerSaysNo

+0

)Thanks for the info。Application.ProcessMessagesはOSXでも動作しますか? – Mike

+0

@Mike、はい、 'Application.ProcessMessages'はクロスプラットフォームで動作します。 –

関連する問題