2012-02-26 3 views
2

Обновленный индикатор прогресса отображается в Windows. В OSX отображается индикатор прогресса, но без изменения смещения панели прогресса.Firemankey OSX update progressbar во время загрузки

См. Код ниже.

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

Спасибо за информацию. Does Application.ProcessMessages также работают под OSX? – Mike

+0

@Mike, да, 'Application.ProcessMessages' работает кросс-платформой. –

Смежные вопросы