Поиск по этому блогу

четверг, 23 июня 2011 г.

Fix SOAPHTTPTrans.pas (D7)


Фикс 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
в этом случае изменения будут учтены при компиляции проекта