2011-07-06 29 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”的实际值,它是迄今为止传输的总字节数。 –