Фикс D7 для корректного отображения progress'а загрузки от Deepak Shenoy 2.2.2004
SOAPHTTPTransp.pas
http://blogs.teamb.com/deepakshenoy/2006/02/04/22983 - источник
// находим процедуру, строка 524
procedure THTTPReqResp.Receive(Context: Integer; Resp: TStream; IsGet: Boolean);
var
Size, Downloaded, Status, Len, Index: DWord;
S: string;
TotalSize, TotalRead: DWORD; // добавить
...
{ Ask for Content-Type } строка 547
Size := MaxContentType;
SetLength(FContentType, MaxContentType);
HttpQueryInfo(Pointer(Context), HTTP_QUERY_CONTENT_TYPE, @FContentType[1], Size, Index);
SetLength(FContentType, Size);
{Добавлено для получения размера и кол-ва принятых данных }
index := 0;
HttpQueryInfo(Pointer(Context), HTTP_QUERY_CONTENT_Length or HTTP_QUERY_FLAG_NUMBER
, @TotalSize, Len, Index);
TotalRead := 0;
{ Конец Добавлено для получения размера и кол-ва принятых данных }
...
{ Read data }
Len := 0;
repeat
Check(not InternetQueryDataAvailable(Pointer(Context), Size, 0, 0));
if Size > 0 then
begin
SetLength(S, Size);
Check(not InternetReadFile(Pointer(Context), @S[1], Size, Downloaded));
Resp.Write(S[1], Size);
{ Receiving Data event } вместо FOnReceivingData(Size, Downloaded) пишем
{Изменено для получения размера и кол-ва принятых данных }
if Assigned(FOnReceivingData) then
begin
Inc(TotalRead, Downloaded);
//FOnReceivingData(Size, Downloaded);
FOnReceivingData(TotalRead, TotalSize);
end;
{Изменено для получения размера и кол-ва принятых данных }
end;
until Size = 0;
Project - Options - Directory / Condition - SearchPath
добавить путь к файлу SOAPHTTPTransp.pas, в котором пофиксили
$(BDS)\Source\Win32\SOAP
в этом случае изменения будут учтены при компиляции проекта