IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Comment mettre à jour une Progressbar en temps réel ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Comment mettre à jour une Progressbar en temps réel ?
    Bonjour,

    J'initialise la progressbar telle que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      ProgressBar1.Position:= 0;
      ProgressBar1.Min:= 0;
      ProgressBar1.Max:= MaxiValue;
    Je souhaite mettre à jour la Progressbar dans une boucle telle que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for k:=0 to MaxiValue-1 do
    begin
      // Fait quelque chose de long
      ProgressBar1.Position:= k;
      ProgressBar1.Repaint;
    end;
    Problème : Windows ne met pas la progressbar à jour en temps réel
    Comment faire ?
    Quelqu'un connait-il la solution ?

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Essaye comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for k:=0 to MaxiValue-1 do
    begin
      // Fait quelque chose de long
      ProgressBar1.StepIt;
    end;
    @+ Claudius

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 254
    Points
    25 254
    Par défaut
    tu peux utiliser Refresh au lieu de Repaint ..., il faut savoir qu'il faut laisser à ton programme le temps de redessiner la barre, ou de gérer le message lié au dessin et autoriser windows de dessiner ... donc soit tu appele Refresh qui va interrompre ton traitement pour dessiner, soit tu appele Application.ProcessMessages qui va gérer les messages de l'application comme le dessinement global de la fenêtre (évite la fenêtre blanche) ainsi que la ProgressBar, mais aussi la souris, le click sur un bouton, il faut donc être conscient que cela ralenti le traitement et qu'il soit nécessaire de protéger ses boutons qui pourrait lancer un autre traitement contradictoire au premier ...

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    C'est pour cela que je préconise l'utilisation de la méthode StepIt qui elle se charge de faire un Refresh sur le contrôle.

    @+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Ca semble marcher mais curieusement pas complètement
    La progressbar se remplit au 3/4 seulement !

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Quelle la valeur de Step ? Elle doit être à 1 d'après ton code.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 254
    Points
    25 254
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    C'est pour cela que je préconise l'utilisation de la méthode StepIt qui elle se charge de faire un Refresh sur le contrôle.
    Ah !
    J'utilise StepIt aussi parce que c'est plus joli que Postion := Position + 1

    Sinon, StepIt ne fait pas de Refresh, elle n'envoi qu'un message à la barre, peut-être que PBM_STEPIT est plus efficacement traîté par windows que PBM_SETPOS

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Ok step était égal à 10 mais ca ne marche pas
    J'ai mis step à 1 mais ce n'est plus au 3/4 que le progressbar se remplit mais à 10%. pourtant la valeur k n'est pas réinitilalisée dans la boucle

Discussions similaires

  1. Réponses: 14
    Dernier message: 26/03/2007, 16h52
  2. [Real-Time] Comment mettre en place un environnement temps réel ?
    Par jlassiramzy dans le forum Développement Mobile en Java
    Réponses: 2
    Dernier message: 26/01/2007, 12h05
  3. Réponses: 1
    Dernier message: 15/09/2006, 11h24
  4. Comment mettre à jour une date ?
    Par Hokagge dans le forum MFC
    Réponses: 6
    Dernier message: 22/03/2006, 12h30
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo