AieAieAie

sym0ne Messages postés 8 Date d'inscription mardi 10 août 2004 Statut Membre Dernière intervention 24 août 2004 - 13 août 2004 à 15:08
sym0ne Messages postés 8 Date d'inscription mardi 10 août 2004 Statut Membre Dernière intervention 24 août 2004 - 17 août 2004 à 13:58
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

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
13 août 2004 à 15:20
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
0
sym0ne Messages postés 8 Date d'inscription mardi 10 août 2004 Statut Membre Dernière intervention 24 août 2004
13 août 2004 à 15:26
Bien vu mais ca change rien ... :(
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
13 août 2004 à 16:21
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
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
13 août 2004 à 17:40
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lil_jam63 Messages postés 9 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 septembre 2004
14 août 2004 à 03:08
Moi je preconiserais de passer par un thread pour ce genre de chose, comme ça ton appli ne freeze pas
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
14 août 2004 à 11:23
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
0
sym0ne Messages postés 8 Date d'inscription mardi 10 août 2004 Statut Membre Dernière intervention 24 août 2004
17 août 2004 à 13:58
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 :)
0
Rejoignez-nous