Bonjour,

Le faq indy de ce site dit qu'il est simple rajouter un progress bar pour afficher la progression d'un téléchargement de fichier via TIdHTTP, mais telle n'est pas mon expérience)

Une fois que j'ai cliqué sur update, le fichier se télécharge bien, mais ma barre de progression reste grise.

A ce jour, il n'y aucune entrée sur le sujet dans google que je n'ai lu déjà au moins 3 fois, et pourtant, la j'abandonne...

voila, le mieux est de poster mon code ici :

d'abord la déclaration des procédures dans type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
procedure IdHTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
    procedure IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
    procedure IdHTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
ensuite le code qui utilise les OnWork events
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
procedure TfrmUpdater.btnUpdateClick(Sender: TObject);
var
Fs : TFileStream;
begin
//frmDownloader.show();
frmUpdater.Height := 272;
pgbDownloader.Top := 192;
pgbDownloader.Enabled := true;
pgbDownloader.Visible := true;
 
Fs := TFileStream.Create('c:\download_update.txt',fmCreate);
  try
    DownloadHTTP('http://.../.../...txt',TStream(fs));
 
    http.OnWorkBegin(frmUpdater.pgbDownloader,wmRead,100);
    pgbDownloader.Position := 0;
    http.OnWork(frmUpdater.pgbDownloader,wmRead,pgbDownloader.Position);
    http.OnWorkEnd(frmUpdater.pgbDownloader,wmRead);
 
    showmessage('download completed!');
 
  finally
    Fs.Free;
  end;
end;
et pour finir, les procédures que j'ai mises en dernier dans le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
procedure TfrmUpdater.IdHTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
   if AWorkMode = wmRead then //uniquement quand le composant recoit des donne'es
   begin
      frmUpdater.pgbDownloader.Max := AWorkCountMax; //Maximum = taille de l'e'le'ment
      frmUpdater.pgbDownloader.Position := 0; //Position a` ze'ro
   end;
end;
 
procedure TfrmUpdater.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
   if AWorkMode=wmRead then //uniquement quand le composant recoit des donne'es
     frmUpdater.pgbDownloader.Position := AWorkCount;
end;
 
procedure TfrmUpdater.IdHTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  frmUpdater.pgbDownloader.Position := 0;
end;
Voila, toutes vos suggestions sont bienvenues, mais en règles générale, je ne suis pas sur de donner les bons paramètres au fonctions IdHTTPWorkBegin etc... quand je les invoques.

Merci pour votre aide,

KND