- TEdit
- TidHTTP
- TButton
- TprogressBar
type
ThreadHTTP=class(TThread)
private
Stream:TMemoryStream;
i:integer;
public
procedure Execute;override;
procedure ShowResult;
end;
Не забываем, что Вы сможете сделать поток с помощью мастера, для этого выполняем команду File-New-Other вкладка New и в данной вкладке выбрать TThread Obejct. Далее в появившемся окне ввести имя потока и нажать на «Ок«. После чего не забудте подключить в Uses данные модули, соответсвенно в модуле потока — модуль главный подключить, а в главной модуле подключить модуль потока. Всмпомним, что процедура Execute - процедура, которая выполняет непосредственно действия потока и синхронизирует другие процедуры, например процедуры результата, в данном случае у нас это процедура ShowResult.
Далее ставим указатель в нашем классе на процедуру Execute и нажимаем комбинацию клавиш — Shift+Crtl+C. Далее я написал код в процедуре Execute и выглядит следующим образом
procedure ThreadHTTP.Execute;
var
j:integer;
begin
inherited;
i:=0;
j:=0;
Stream:=TMemoryStream.Create;
Form1.IdHTTP1.Get('https://devdelphi.ru/files/VK_APImodul.rar',Stream);
Form1.ProgressBar1.Max:=Stream.Size;
while j<=Stream.Size do
begin
inc(i);
Synchronize(ShowResult);
inc(j);
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
end;
Stream.SaveToFile('C:\1.rar');
Stream.Free;
end;
Как видите я завел переменную i, которая считает сколько мы в текущий момент скачали байт файла, это популярна, чтобы знать как идет скачка.
Процедура ShowResult у меня выглядит следующим образом
procedure ThreadHTTP.ShowResult;
begin
Form1.Caption:=IntToStr(i)+' kbs';
end;
То есть я просто на заголовке окна отображаю сколько мы скачали байт файла из сети Интернет, в данном случае с моего сайта. Перед этим в процедуре Execute я синхронизировал данный результат
Далее на событие OnClick TButton нам необходимо создать поток и запустить его, чтобы началась скачка, для этого я написал следующее
procedure TForm1.Button1Click(Sender: TObject);
var
MyHTTP:ThreadHTTP;
begin
ProgressBar1.Position:=0;
MyHTTP:=ThreadHTTP.Create(False);
end;
Обнуляем наш TProgressBar и создаем наш поток, и сразу вызываем процедуру Execute.
Как видите ничего сложно нету, чем дальше, тем интереснее. Ну, что ждем следующих статьей по потокам.
Исходники статьи качаем тут