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 synapse, logowanie na strone, jak dodać pasek stanu? 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).