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ł ;)
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ł ;)
Pewnie, że wiem :) Temat był poruszany nie tak dawno, pod adresem http://4programmers.net/Forum/Delphi_Pascal/179292-synapse_logowanie_na_strone_jak_dodac_pasek_stanu?p=740630 jest tam krótki przykład dzięki któremu powinieneś zrozumieć ideę.
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;
U mnie aktualizuje się na bieżąco może to wina systemu lub wersji Delphi ja mam Windows XP i Delphi 7.
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)
Dzięki. Już jest ok. Po sprawdzeniu breakpointem, widać, że pobiera (postęp + odwołanie ile kB).