Delphi 7 Скачивание в потоке
Добрый вечер, как можно скачать файл в потоке через синапс?
Код без потока:
function GetSize1(const AURL : string): int64;
var HTTPClient1: THTTPSend;
I: Integer;
s: string;
begin
Result:=-1;
HTTPClient1:=THTTPSend.Create;
try
if HTTPClient1.HTTPMethod('HEAD',AURL) then
begin
for I := 0 to HTTPClient1.Headers.Count-1 do
begin
if pos('content-length',lowercase(HTTPClient1.Headers[i]))>0 then
begin
s:= copy(HTTPClient1.Headers[i], 16,
Length(HTTPClient1.Headers[i] )-15);
Result:=StrToInt(s)+Length(HTTPClient1.Headers.Text);
break;
end;
end;
end;
finally
HTTPClient1.Free
end;
end;
procedure TForm1.OnSockStatus1(Sender: TObject; Reason: THookSocketReason;
const Value: String);
const
cProgress = '%d/%d MB';
begin
if Reason=HR_ReadCount then
begin
Form1.downloaded1:=Form1.downloaded1+StrToInt(Value);
if Form1.size1>0 then
begin
Form1.Gauge1.Progress:=round(Form1.downloaded1/1024/1024);
Form1.Label1.Caption:=Format(cProgress,[round(Form1.downloaded1/1024/1024),Form1.Gauge1.MaxValue]);
end
else
Form1.Label1.Caption:=IntToStr(round(Form1.downloaded1/1024/1024))+' MB';
Application.ProcessMessages;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var HTTPClient1: THTTPSend;
begin
downloaded1:=0;
size1:=GetSize1('http://www.ferma.name/internet.txt');//получаем размер файла для загрузки
{определяем стиль у Gauge}
if size1>0 then
begin
Gauge1.MaxValue:= round(size1/1024/1024);
end;
HTTPClient1:=THTTPSend.Create;
try
//определяем обработчик события OnStatus
HTTPClient1.Sock.OnStatus:=OnSockStatus1;
{Пробуем скачать файл}
if HTTPClient1.HTTPMethod('GET','http://www.ferma.name/internet.txt') then
HTTPClient1.Document.SaveToFile('internet.txt');
finally
HTTPClient1.Free;
end;
end;
Попробуй через TThread создать новый поток и уже в нём создавать экземпляр THTTPSend и выполнять скачивание.