Synapse - postęp pobierania

0

Witam

Parę osób tutaj zachwala Synapse odrzucając Indy.
Spróbowałem i napotkałem problem, gdyż nie wiadomo jak wydobyć postęp pobierania pliku poprzez moduł HTTPSend.

Podejrzewam, że Olesio będzie wiedział ;)

0

Pewnie, że wiem :) Temat był poruszany nie tak dawno, pod adresem synapse, logowanie na strone, jak dodać pasek stanu? jest tam krótki przykład dzięki któremu powinieneś zrozumieć ideę.

0

Ok, postęp jest.
Tylko, że od momentu kliknięcia wywołania pobierania, pasek postępu aktualizuje się dopiero po zakończeniu pobrania.

  public
    SynHttp: THttpSend;
    procedure SockCallBack(Sender : TObject; Reason : THookSocketReason; const Value : string);
  end;

begin
 SynHttp := THttpSend.Create;
 SynHttp.Sock.OnStatus := SockCallBack;
 SynHttp.HTTPMethod('GET', Edit1.Text);

 case SynHttp.ResultCode of
   200: Label2.Caption := 'OK';
   206: Label2.Caption := 'Częściowa zawartość';
   301: Label2.Caption := 'Przeniesiono na stałe';
   302: Label2.Caption := 'Przeniesione tymczasowo';
   304: Label2.Caption := 'Niezmodyfikowany';
   400: Label2.Caption := 'Błędne żądanie';
   403: Label2.Caption := 'Acces denied (zakazane - brak dostępu)';
   404: Label2.Caption := 'Nie znaleziono (brak strony)';
   405: Label2.Caption := 'Nieuznawana metoda';
   412: Label2.Caption := 'Warunki niespełnione';
   500: Label2.Caption := 'Błąd serwera';
 end;

 SynHttp.Document.SaveToFile(Edit2.Text);
end;

procedure TFormTest.SockCallBack(Sender : TObject; Reason : THookSocketReason; const Value : string);
begin
 if SynHttp.DownloadSize > 0 then
   begin
    ProgressBar.Max := SynHttp.DownloadSize;
    if (Reason = HR_ReadCount) then
      begin
       Application.ProcessMessages;
       ProgressBar.Position := ProgressBar.Position + StrToInt(Value);
       Label1.Caption := Format('Pobrano: %d kB z: %d kB', [ProgressBar.Position div 1024, SynHttp.DownloadSize div 1024]);
      end;
   end;
end;
0

U mnie aktualizuje się na bieżąco może to wina systemu lub wersji Delphi ja mam Windows XP i Delphi 7.

0
       ProgressBar.Position := ProgressBar.Position + StrToInt(Value);
       Label1.Caption := Format('Pobrano: %d kB z: %d kB', [ProgressBar.Position div 1024, SynHttp.DownloadSize div 1024]);
       Application.ProcessMessages;

postaw breakpointa na pierwszym ifie i zobacz sobie ile Ci pobrał - może masz plik mały i pobiera go na raz. Może być też tak, że serwer zwraca go w jednym kawałku (CONTENT-LENGTH=rozmiar)

0

Dzięki. Już jest ok. Po sprawdzeniu breakpointem, widać, że pobiera (postęp + odwołanie ile kB).

1 użytkowników online, w tym zalogowanych: 0, gości: 1