AieAieAie

Signaler
Messages postés
8
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
24 août 2004
-
Messages postés
8
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
24 août 2004
-
Bonjour a tous !

J'ai encore une question stupide :

Voila j'ai dans mon application une fonction qui cherche plein de fichiers sur plusieures machine et donc, ca prends un temps fou. Le problème c'est que pour cette recherche j'utilise deux boucles while() et donc le programme freeze pendant un petit moment... J'ai mis une ProgressBar pour suivre le dérroulement mais il est tellement utilisé par les deux while() qu'il n'affiche meme pas la ProgressBar ...

Y a t-il un moyen pour rendre malgrès ces boucles, la progressbar active et une possibilité de cliquer sur "Arreter la recherche" ?

7 réponses

Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
A l'interieur de tes boucles while il faut que tu mettes Application.ProcessMessages . Cela permet au programme de traiter les messages windows de rafraichisement de la fenêtre.

Si tes boucles whiles sont imbriquées il faut mettre Application.ProcessMessages à l'interieur de ta derniere boucle :
while ce_que_tu_veux do
  begin
    while ce_que_tu_veux_d_autre do  
      begin
        Application.ProcessMessages;
        // Reste du code
      end;
  end;

Voila.

Ps aux webmasters : on ne peut pas mettre de code dans une question.

Si tu ne te plantes pas ......
tu ne poussera jamais
Messages postés
8
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
24 août 2004

Bien vu mais ca change rien ... :(
Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
Je suppose que la mise à jour de ta ProgressBar se situe dans une de tes boucles (sinon y'aurait comme un blème, lol) ? ;)

Application.ProcessMessages placé juste après cette maj devrait à priori suffire (bien vu, florenth), quoique...

Sinon, il ne te reste plus qu'à placer tes boucles dans un (voire deux ?) Threads.

Bonne prog' :-p
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
Ou en plaçant, après la modification de la valeur du ProgressBar, l'instruction ProgressBar.Repaint qui force le ré-affichage sans attendre un momment plus "calme"

Ken@vo
____________________
Code, Code, Codec !
Messages postés
9
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 septembre 2004

Moi je preconiserais de passer par un thread pour ce genre de chose, comme ça ton appli ne freeze pas
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Normalement Application.ProcessMessages permet bien au programme de rafraichier la fenêtre.
J'utilise même 5 boucles for imbriquées les unes dans les autres et cela marche tres bien.

" ProgressBar.repaint " rafraichit bien la progressbar mais cela ne permet pas de cliquer sur le bouton Arreter la recherche

Concernant les threads, si on ne maitrise pas trop (comme moi) , je pense qu'il vaut mieux éviter sinon c'est sûr que c'est mieux ...

Ps aux webmasters : on ne peut pas mettre de code dans une question.

Si tu ne te plantes pas ......
tu ne poussera jamais
Messages postés
8
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
24 août 2004

Ok merci beaucoup tous pour vos réponses...
En fait le Application.ProcessMessages; réagit bien comme attendu c'était juste a cause du TCPClient qui met longtemps pour découvrir qu'une ip n'est pas valide sur le domaine !

A bientot :)