Tom59247
Messages postés27Date d'inscriptionjeudi 7 janvier 2010StatutMembreDernière intervention 7 février 2013
-
13 avril 2010 à 21:55
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
1 mai 2010 à 19:19
Bonsoir tout le monde,
dans le cadre d'un projet, je dois réaliser une interface graphique qui devra évoluer en fonction d'information reçu par un automate.(Station de surpression, gére la demande en eau de plusieurs utilisateurs .. bref)
j'ai un soucis dans la progression d'une ProgressBar celle ci doit évoluer en fonction de la pression (demande des utilisateurs, plus il y a de demande , plus la pression montera ou inversement)
j'ai reussi a la faire évoluer mais c'est beaucoup trop long la barre ne progresse pas assez vite je souhaiterais une barre un poil plus fluide...
Je vous link mon code afin de visualiser un peu mieux mon problème
if(Edit_Preseuil->Text.ToInt() < Edit_Pression->Text.ToInt())
{
//boucle pour augmenter la pression
for(int i=Edit_Preseuil->Text.ToInt();i<Edit_Pression->Text.ToInt();i++)
{
Manometre->Position = i;
Sleep(1); //probleme l'avancement du progressbar n'est pas assez rapide
}
//Réaction a l'augmentation de la pression sans reel importance pour ma question
//juste que dans les méthodes appelés entraine un autre timer que celui qui fait progressé le manometre
Timer_Pompe1->Enabled=true;
for(int i=0;i<=4;i++)
IHM_Syn->TabVanne1[i].VanneUp();
//la progressbar(Manometre) doit réduire car "le moteur" se met en marche
for(int u=Edit_Pression->Text.ToInt();u>Edit_Preseuil->Text.ToInt();u--)
{
Manometre->Position = u;
Edit_Pression->Text = u;
Sleep(1);
}
}
(en réalité le code doit SI la pression est plus haute que la pression de seuil, la progressbar augmente puis le moteur se met en route et enfin la progressBar doit revenir a la pression de seuil)
donc voilà le premier problème avec le manometre, le second probleme est que le code entre les 2boucles FOR (Timer_pompe et la methode Vanne_up) ne se lance qu'a la fin de ma 2em boucle FOR est là je ne comprends pas pourquoi ...
Si quelqu'un peut m'éclairer, ca m'aiderait énormement :)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 avril 2010 à 07:37
for(int i=Edit_Preseuil->Text.ToInt();i<Edit_Pression->Text.ToInt();i++)
A chaque tour de boucle tu relis le texte de l'EDIT et tu le transformes en 1 entier, faut pas s'étonner que ce n'est pas rapide.
Ce n'est pas avec ce genre de sabir que tu apprendras à coder efficace.
i = Edit_Pression->Text.ToInt();
Manometre->Position = i - 1;
Devrait donner le meme resultat.
Tom59247
Messages postés27Date d'inscriptionjeudi 7 janvier 2010StatutMembreDernière intervention 7 février 2013 14 avril 2010 à 10:56
Salut BruNews, merci de regarder à mon soucis,
en réalité ce n'est pas la boucle qui est trop longue car si j'enleve le sleep mon programme tourne en instantanné, c'est juste que "sleep(1)" est encore trop long car ma pression de seuil sera par exemple de 2000 et ma pression sera de 4000 ce qui fait 2000 itérations dans ma boucle.
j'ai effectué un petit test pour bien observer que ca marche
for( i=Edit_Preseuil->Text.ToInt();i<Edit_Pression->Text.ToInt();i++)
{
Manometre->Position = i;
if(test == 10)
{
Sleep(1); //probleme l'avancement du progressbar n'est pas assez rapide
test = 0;
}
else
test ++;
dans ce cas là ma barre charge comme il faut... mais déjà que mon code fait débutant là c'est encore un niveau en dessous :/
j'aurais souhaité un moyen de faire une sorte de "sleep(1/10) ou sleep(0.1)" mais d'apres ce que j'ai constaté c'est exactement comme si je ne mettais pas de timer...
Auriez vous une alternative au probleme ? autre chose que le test que je viens de mettre :/
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 1 mai 2010 à 19:19
Salut,
Heu bin tu peux avancer plus vite que de 1 en 1 peut être.
for( i=Edit_Preseuil->Text.ToInt();i<Edit_Pression->Text.ToInt();i += 10)
{
Manometre->Position = i;
Sleep(1); //probleme l'avancement du progressbar n'est pas assez rapide
Et effectivement, exécuter une seule fois Edit_Pression->Text.ToInt() avant la boucle serait beaucoup plus propre, même si ça ne résout pas ton problème.