Indy : idhttp empecher que ça freeze !

Indy : idhttp empecher que ça freeze ! - Delphi/Pascal - Programmation

Marsh Posté le 28-11-2004 à 19:46:42    

Bonsoir à tous,
 
voilà, j'essaye de me faire un prog qui récupère automatiquement les bandes annonces des films de la semaine à partir du site cinefil.com.
Bon j'arrive bien à télécharger les BA (enfin une pour l'instant pour tester !)  
Mais mon appli freezait un peu (genre impossible de déplacer la fenêtre de l'appli)
 
J'ai installé les composants indy 9.0.18 (datant e ce mois-ci) et j'ai vu qu'il existe un composant IdAntiFreeze. Comme vu sur un site, j'ai posé ce composant sur ma fenêtre, mais cela ne faisait rien.
J'ai donc rajouter un IdAntifreeze.process dans la procédure idhttp.work.
Cela va un peux mieux, j'ai maintenant la progression et la vitesse du téléchargement qui s'affichent correctement, mais il reste un petit pb (à mon goût), windows met une à deux seconds pour déplacer la fenêtre du prog, si je lui demande.
 
Alors ma question est que puis-je faire ?
 
J'ai vu aussi qu'on pouvait faire un thread. Mais je ne sais absoluement pas comment ça marche. (ni ce que c'est d'ailleurs !)
 
Merci pour votre aide.


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Marsh Posté le 28-11-2004 à 19:46:42   

Reply

Marsh Posté le 28-11-2004 à 20:13:13    

"Cela va un peux mieux, j'ai maintenant la progression et la vitesse du téléchargement qui s'affichent correctement"  
 
Ca m'intéresse, comment as-tu fais ?? Moi ça chie tout court.

Reply

Marsh Posté le 28-11-2004 à 20:45:48    

Et bien, sur le fameux site de Michel j'ai trouvé une page intéressante :  
 
http://www.phidels.com/php/index.p [...] b76d3042c5
 
plus cette page :
 
http://delphi.developpez.com/faq/?page=indy_idhttp
 
J'ai téléchargé et installer les dernier indy (http://www.indyproject.com : les 9.0.18)
 
voici mon code source de ma fiche de téléchargement :  
 

Citation :

unit Unittelechargement;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IdAntiFreezeBase, IdAntiFreeze, StdCtrls, ComCtrls, XPMan,DateUtils;
 
type
  TFormtelechargement = class(TForm)
    IdHTTP1: TIdHTTP;
    IdAntiFreeze1: TIdAntiFreeze;
    ProgressBartelechargement: TProgressBar;
    Labeltailletelecharge: TLabel;
    XPManifest1: TXPManifest;
    Labelvitesse: TLabel;
    procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    procedure IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
 
var
  Formtelechargement: TFormtelechargement;
  fstartdate:tdate;
const
  RS_Fin = 'Téléchargement terminé';
 
implementation
 
{$R *.dfm}
 
procedure TFormtelechargement.IdHTTP1Work(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCount: Integer);
var ElapsedTime : Cardinal;
begin
 if AWorkMode = wmRead then
  begin
    ProgressBartelechargement.Position := AWorkCount ;
    LabelTailleTelecharge.Caption := 'Fichier téléchargé : '+inttostr(round(Aworkcount/1000))+' ko / '+inttostr(round(progressbartelechargement.max/1000))+' ko.';
                         //Format(RS_Debit, [AWorkCount, ProgressBartelechargement.Max]);
     ElapsedTime := SecondsBetween(Now,FStartDate); //Calculer le temps de téléchargement
     if ElapsedTime>0 then
     begin
       Labelvitesse.Caption := 'Vous téléchargez à '+inttostr(round((AWorkCount/1024)/ElapsedTime))+' Ko/s';
       Formtelechargement.IdAntiFreeze1.process;
     end;
    end;
end;
 
procedure TFormtelechargement.IdHTTP1WorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
 if AWorkMode = wmRead then
  begin
    ProgressBartelechargement.Max := AWorkCountMax;
    ProgressBartelechargement.Position := 0 ;
    labelvitesse.Caption:='Téléchargement à 0 ko/s';
    FStartDate := Now;
  end;
end;
 
procedure TFormtelechargement.IdHTTP1WorkEnd(Sender: TObject;
  AWorkMode: TWorkMode);
begin
 if AWorkMode = wmRead then
  begin
    LabelTailleTelecharge.Caption := RS_Fin;
    ProgressBartelechargement.Position := ProgressBartelechargement.Max;
  end;
end;
 
end.


 
Il s'agit tout simplement d'une fiche sur laquelle j'ai mis :
une progressbar : name : progressbartelechargement
deux label : name : labelvitesse, labeltailletelecharge
un compo idhttp et un compo idantifreeze
 
Voilà.


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Marsh Posté le 28-11-2004 à 21:01:10    

Vous êtes encore là avec vos threads qui marchent pas ? :o
Ça avait déjà commencé là : http://forum.hardware.fr/forum2.ph [...] 356&cat=10
Il faudrait absolument que je fasse un petit exemple du fonctionnement des threads avec le TIdHttp.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-11-2004 à 22:54:56    

oh oui, un exemple !


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Marsh Posté le 29-11-2004 à 22:32:38    

ou le source de Kapere...
 
ah benh non, je le donnerai pas  
 
 
[:neowen]


Message édité par zion le 29-11-2004 à 22:32:46

---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 29-11-2004 à 22:40:41    

le code source d'Ant Renamer (thread utilisé pour renommer les fichiers) ou d'Ant Movie Catalog (thread utilisé pour le download justement)
:D
mais c'est vachement lourd à installer et compliqué à piger je pense (mélangé à tout le reste du code du soft), d'où l'idée d'un exemple simple...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed