Suggerisco un'attenta lettura della Guida in linea.
Ho creato una piccola applicazione in 5 minuti facendo così:
ho inserito un componente TIdHttp sul form principale, più un pulsante per avviare il download del file.
Per effettuare il download, ho scritto questo brevissimo codice.
codice:
procedure TForm1.Button1Click(Sender: TObject);
var
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
IdHTTP1.Get('http://www.abls.it/filename.txt', MS);
MS.SaveToFile('C:\filename.txt');
finally
MS.Free;
end;
end;
Il codice utilizza il metodo Get passando come parametro l'indirizzo del file da ricevere e un'istanza di TMemoryStream per copiare in memoria i dati ricevuti. Successivamente, con il metodo SaveToFile si provvede a salvare su disco il file ricevuto. Ora passiamo alla parte dello "stato del lavoro".
Come avevo suggerito, gli eventi da intercettare sono OnWorkBegin e OnWork (l'evento OnWorkEnd si può utilizzare per segnalare il completamento del download, ad esempio).
Questo è il codice dell'evento OnWorkBegin.
codice:
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
ProgressBar1.Max := AWorkCountMax;
end;
Il valore massimo della ProgressBar viene inizializzato con il massimo valore assunto da WorkCount, che esprime il numero di byte scaricati e viene restituito dall'evento OnWork:
codice:
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
ProgressBar1.Position := AWorkCount;
end;
Nell'evento, durante il download, aggiorniamo lo stato della ProgressBar assegnando a Position il valore di AWorkCount.
Il gioco è fatto...