Você irá precisar de:
1* TGroupBox - Standard
1* TIDHTTP - Indy
1* TButton - Standard
2* TEdit - Standard
2* TLabel - Standard

Coloque os componentes como você desejar!

download2.JPG
----

Códigooooo!!!

Adicione esta função após a declaração de DFM

function FileFromLink(Link:String):String;
var
  i,p:integer;
Begin
  for
i:= length(Link) downto 0 do
    if Link[i] = `/` then begin
      p:= i;
      Break;
    end;
  Result:= copy(Link, p+1, length(Link) );
end;

Esta função tem como objetivo, retornar o nome do arquivo de algum link da internet.

---

No Evento de OnClick do Button1, coloque o seguinte código:

procedure TForm1.Button1Click(Sender: TObject);
var
  strm:TMemoryStream;
begin
  try

    strm:= TMemoryStream.Create;
    button1.Enabled:=false;
    with IdHTTP1 do begin
      Get(edtLink.Text, STRM);
      STRM.SaveToFile(edtDestino.Text + FileFromLink(edtLink.Text) );
      Showmessage(`Terminado.`);

    end;
  finally

    button1.Enabled:=True;
  end;
end;

Aqui, ele chama o download, e depois que ele terminar ele salva de acordo com o local escolhido.

---
Agora no Evento OnWorkBegin do TIDHTTP1 Coloque o seguinte código:

procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Max:= AWorkCountMax;
end;

Aqui, Ele define o tamanho máximo da barra de acordo com o tamanho do arquivo para download.

--

Agora no Evento OnWork do TIDHTTP1 Coloque o seguinte código:

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position:= AWorkCount;
  Caption:= inttostr(AWorkCount div 1024)+`KB de` +inttostr(ProgressBar1.Max div 1024)+`KB`;
end;

"a" 

Aqui, Ele define a posição da barra de acordo com o que já foi baixado do arquivo para download.

Agora o programa baixando um arquivo de 1.1MB

download1.JPG

Está pronto nosso baixador de arquivos.