Cauchemar avec TProgressBar et Indy 10 et Delphi 7
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:
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:
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:
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