2011-07-06 48 views
0

我想從我的TIdHTTP組件顯示POST調用的進度。IdHTTP.Post - 我沒有進度顯示在進度條

procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; 
    AWorkCount: Int64); 
begin 
ProgressBar1.Position := AWorkCount; 
end; 

procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; 
    AWorkCountMax: Int64); 
begin 
Progressbar1.Max := AWorkCountMax; 
end; 

然而,當我調試這個,我的土地2次在.Max = AWorkCountMax;線,並在第一時間值是65,而第2次值爲0

我知道這可能不是因爲它需要很長時間,但所有這些都取決於返回多少數據,這可能需要很長時間。

回答

1

開始

procedure TForm1.IdHTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; 
    const AWorkCountMax: Integer); 
begin 
    if AWorkMode = wmRead then 
    begin 
     ProgressBar.Max := AWorkCountMax; 
     ProgressBar.Position := 0; 
    end; 
end; 

tranfert

procedure TForm1.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode; 
    const AWorkCount: Integer); 
begin 
    if AWorkMode=wmRead then 
    ProgressBar.Position := AWorkCount; 
end; 

procedure TForm1.IdHTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode); 
begin 
    ProgressBar.Position := 0; 
end; 
+0

這並沒有做到這一點:( – Jeff

+0

嗯,我想這是因爲它無法確定實際尺寸,因爲輸出是動態創建的.. – Jeff

+0

這是正確的。當AWorkCountMax是零時Indy事先並不知道預計會有多少數據。在HTTP中,這通常意味着服務器正在以塊的形式發送答覆數據(答覆中包含一個「Transfer-Encoding:chunked」頭文件)。當「AWorkCountMax」爲零時,您應該使用不同的UI來顯示「AWorkCount」的實際值,它是迄今爲止傳輸的總字節數。 –