total do arquivo, a cada pacote realizamos uma conversao dos valores incrementando o percentual ate a conclusao do trabalho. Adicione o codigo a seguir ao componente:procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;AWorkCount: Integer);begin {a cada conjunto de bytes trazidos pelo componente, incrementamos o Gauge} Gauge1.Progress := AWorkCount; {mostra no label o total de bytes e o progresso do download em bytes} LblDownload.Caption := 'Baixando '+FormatFloat('#0.00',(AWorkCount/1024)/1024)+'MB de '+FormatFloat('#0.00',(Gauge1.MaxValue/1024)/1024)+'MB'; {reescreve os valores no formulario} if AWorkMode = wmRead then begin //Marca o tempo percorrido ElapsedTime := SecondsBetween(Now,FStartDate); if ElapsedTime > 0 then begin //Calcula a velocidade com base nos arquivos transferidos e tempo percorrido lblVelocidade.Caption := Format('%s Kb/s', [FormatFloat('0.00',(AWorkCount/1024)/ElapsedTime)]); Application.ProcessMessages; end; end; Repaint;end;Encerramento do DownloadAo receber todos os bytes do arquivo solicitado atraves da URL, utilizaremos este evento para informar ao usuario que a tarefa esta concluida, exibindo uma simples mensagem no Caption do LblDownload, adicionado o codigo a seguir:procedure TForm1.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);begin {conclusao do trabalho, fim do download} LblDownload.Caption := 'Download concluido!';end;Controle do DownloadAntes de codificarmos o botao para iniciar o processo de trabalho do componente, iremos adicionar uma nova function que ira manter as atividades e mensagens do formulario atualizadas durante o processo de download que ocorre atraves de um Stream de arquivos criado, e que ira armazenando o arquivo na medida em que sera recebido da web. Ha tambem um controle de excecoes caso algum erro ocorra durante o download e ao finalizar, a remocao da variavel de stream da memoria. Declare dentro do bloco Public da unit a seguinte function:procedure DownloadFile(SourceFile, FromFile: String);Utilizando as teclas de atalho Shift+Ctrl+C sobre a funcao declarada para que o Delphi faca a implementacao da mesma, adicione o codigo abaixo analisando-o de acordo com as acoes de cada bloco acompanhados por comentarios explicativos.procedure TForm1.DownloadFile(SourceFile, FromFile: String);var fsFromFile: TFileStream;begin {atualiza e processa as acoes ocorrendo na aplicacao} Application.ProcessMessages; {cria um stream temporario para o download} fsFromFile := TFileStream.Create( FromFile, fmCreate ); try try {obtem o arquivo solicitado na URL e salva-o em disco} idHTTP1.Get( SourceFile, fsFromFile ); except on Error: Exception do begin {tratamento dos erros quando houver} ShowMessage('O seguinte erro ocorreu durante o download:'+#13+Error.Message ); Raise; end; end; finally {limpa a variavel da memoria e desconecta o componente} fsFromFile.Free; idHTTP1.Disconnect end;end;DICA: caso algum codigo nao seja reconhecido pela nao declaracao das uses como por exemplo que podera ocorrer com o Type TFileStream, posicione o cursor sobre o mesmo e usando as teclas Shift+Ctrl+A, selecione aquela que se refere ao tipo declarado e pressione Enter que o mesmo sera adicionado automaticamente nas declaracoes do formulario.DownloadAgora sim, para que o Download de fato aconteca, precisamos codificar o botao responsavel pelo Start dos demais eventos e funcoes que ja vimos. Com um duplo clique sobre o botao, adicione o codigo a seguir, o qual fara uma verificacao para saber se realmente ha algum valor informado no Edit da URL e em seguida passando para o processo de tratamento do nome a ser atribuido ao arquivo a ser salvo e a escolha de um local no disco para o armazenamento, iniciando dessa forma a transferencia do arquivo.procedure TForm1.btDownloadClick(Sender: TObject);var vArquivo: