2011-07-06 2 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; 

그러나, 나는 .Max = AWorkCountMax; 줄에 2 번 착륙, 처음으로이 값은 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'는 0 일 때 Indy는 얼마나 많은 데이터가 예상되는지 미리 알지 못합니다. HTTP에서는 보통 서버가 응답 데이터를 청크로 보내고 있음을 나타냅니다 (응답에는'Transfer-Encoding : chunked' 헤더가 들어 있습니다). 'AWorkCountMax'가 0 일 때, 다른 UI를 사용하여 지금까지 전송 된 총 바이트 수인'AWorkCount'의 실제 값을 표시해야합니다. –

관련 문제