Synapse - postęp pobierania

Odpowiedz Nowy wątek
2011-05-16 00:37
Opi
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ł ;)

edytowany 1x, ostatnio: madmike, 2011-05-16 07:44

Pozostało 580 znaków

2011-05-16 00:54
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ę.


Pozostało 580 znaków

2011-05-16 09:07
Opi
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;

Pozostało 580 znaków

2011-05-16 10:10
0

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


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.

Pozostało 580 znaków

2011-05-16 10:24
       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)


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 2x, ostatnio: Misiekd, 2011-05-16 10:24

Pozostało 580 znaków

2011-05-18 23:35
Opi
0

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

edytowany 1x, ostatnio: Opi, 2011-05-18 23:36

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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