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

C++Builder Discussion :

Probl�me de refresh d'une TProgressBar


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Avatar de dj_benz
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    178
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 178
    Par d�faut Probl�me de refresh d'une TProgressBar
    Bonjour � tous,
    mon probl�me est le suivant: j'ai une fen�tre contenant une TProgressBar, qui appelle une classe ind�pendante qui fait un calcul assez long (import d'un fichier Excel d'une longueur connue): je peux donc, dans ma classe d'import, connaitre la proportion de temps qu'il me reste pour finir l'import. J'essaie donc de mettre � jour la progressBar de la fen�tre, mais �a ne fonctionne pas. Dans mon code, lors de l'appel de ma fonction de classe d'import depuis la fen�tre (lors d'un click), j'envoi le pointeur vers la TProgressBar, que j'utilise dans la classe pour la mettre � jour. Or, la progressBar ne bouge pas � l'�cran. Alors que j'ai pris soin d'ajouter des lignes de raffraichissement juste apr�s la modification de la position: refresh(), repaint() et m�me Application->ProcessMessages()
    Ce qui est bizarre, c'est que lorsque j'affiche, avec un MessageBox, la valeur de progress->Position, j'ai la bonne valeur!

    Voici un extrait du 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
     
    /**** dans la fenetre ****/
    TProgressBar* progress;
    obj->loadFile(filename, progress);
     
    /**** dans la classe ****/
    void loadFile(AnsiString filename, TProgressBar* progress){
      progress->Min = 0;
      progress->Max = 100;
      for (int i=0; i<100; i++){
        // import excel
        progress->Position = i;
        progress->Refresh();
        progress->Repaint();
        Application->ProcessMessages();
      }
    }
    Merci de vos id�es et suggestions!
    A bientot

    Benz

  2. #2
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    C'est assez connu comme PB:

    Si c'est ta classe ou ta fonction tu doit int�grer dans tes longs calculs des appels r�guliers �
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Application->ProcessMessages();
    Sinon certain composant comme Indy ont des fonctions "Antifreeze".

    Dans ton cas il faudra peut �tre faire un thread avec ta fonction d'import afin de ne pas perdre la main dans l'application en cours

  3. #3
    Membre confirm�
    Avatar de dj_benz
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    178
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 178
    Par d�faut
    Je viens de r�soudre mon probl�me en faisant un test tout b�te!!
    En fait, je voulais essayer avec un m�mo, et y afficher le num�ro de la ligne que j'importe. J'ai donc chang� mon param�tre de la fonction en TComponent* histoire d'�tre plus g�n�rique, et je caste ensuite le param�tre en (TMemo*) pour y �crire. L�, �a fonctionne! Donc, je me suis dit que j'allais essayer de passer la progressBar en TComponent et de la caster � l'arriv�e. Et l�, �a fonctionne aussi!

    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
     
    /**** dans la fenetre ****/
    TProgressBar* progress;
    obj->loadFile(filename, progress);
     
    /**** dans la classe ****/
    void loadFile(AnsiString filename, TComponent* progress){
      ((TProgressBar*)progress)->Min = 0;
      ((TProgressBar*)progress)->Max = 100;
      for (int i=0; i<100; i++){
        // import excel
        ((TProgressBar*)progress)->Position = i;
        Application->ProcessMessages();
      }
    }
    J'ai laiss� ProcessMessages(), mais j'ai fait un test sans et �a marche aussi (pour la progressBar, mais la fen�tre est moins r�active)

    Merci quand m�me pour votre aide!
    Benz

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 07/05/2013, 16h33
  2. Probl�me de refresh dans une application modulaire
    Par TigrouMeow dans le forum Windows Forms
    R�ponses: 8
    Dernier message: 11/10/2007, 15h06
  3. Probl�me de refresh dans une JTable
    Par vano dans le forum Composants
    R�ponses: 3
    Dernier message: 04/05/2006, 14h57
  4. probl�me de refresh sur une DBGrid
    Par lidouka dans le forum Bases de donn�es
    R�ponses: 4
    Dernier message: 20/12/2005, 17h12
  5. probl�me d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    R�ponses: 7
    Dernier message: 29/08/2002, 09h43

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