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
ensuite le code qui utilise les OnWork events
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);
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
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;
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.
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;
Merci pour votre aide,
KND
Partager