TouffuS
Messages postés4Date d'inscriptionvendredi 9 novembre 2007StatutMembreDernière intervention11 novembre 2007
-
10 nov. 2007 à 00:41
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
17 janv. 2008 à 12:10
Bonjour à tous,
Dans le cadre d'un projet de programme, qui comporte trois boutons, j'aimerais rajouter une barre de progression, car les actions effectués par ces derniers, peuvent parfois prendre un certains temps.
Étant donné que je débute, je viens vous voir, pour avoir de l'aide afin de concrétiser ce que je souhaiterais faire.
Merci pour les réponses que vous pouvez m'apporter.
cedricbi
Messages postés185Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention21 mars 2011 10 nov. 2007 à 22:59
Que ne comprends-tu pas dans la ProgressBar ?
Si tu cherches le composant TProgressBar, il se trouve dans l'onglet Win32 des composants.
Autrement, si tu veux savoir comment utiliser la ProgressBar, seule trois propriétés sont vraiment utiles : Min, Max et Position.
Min est la valeur minimale, Max la valeur maximale et Position correspond à la progression de ton action entre Min et Max.
Par exemple pour une progression en pourcentage, on a :
Min := 0;
Max := 100;
Position := x;
Avec x, une valeur indiquant où en est le processus (l'action). Attention cependant, Position doit être une valeur entière, donc si x est un réel, tu dois définir Position comme ceci :
Position := Round(x);
Voila.
J'espère avoir répondu à ta question, si non si tu pouvais préciser ta question...
<hr />Le plus dur dans un programme c'est de savoir pourquoi il marche !
TouffuS
Messages postés4Date d'inscriptionvendredi 9 novembre 2007StatutMembreDernière intervention11 novembre 2007 11 nov. 2007 à 12:21
bonsoir a tous!
Merci de m'avoir répondu! En fait, je vais être plus précis.
Ce que je souhaiterais, faire, ce que par exemple, une fois le bouton 1 cliqué, que la barre de progression se mette en route, et qu'elle s'arrete d'elle même une fois l'action du bouton 1 terminée.
Si j'ai bien compris, il va falloir que je mette les parametres dans la procédure du bouton concerné non?
cedricbi
Messages postés185Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention21 mars 2011 11 nov. 2007 à 14:39
Il faut que tu insères seulement le code te ton action.
Et tu ne peux pas dire à la progressbar, je commence ici, je termine ici. Car la ProgressBar ne pourrais pas savoir où en a la progression.
Donc par exemple si tu fais une boucle pour mettre en rouge tous les pixels d'une image, voici ce que tu pourrais mettre :
procedure TMyThread.Execute;
var
X, Y : Integer;
Largeur, Hauteur : Integer;
begin
{ Tu initialises ici les valeurs minimale et maximale que va prendre ta progression }
FProgressForm.Min := 0;
FProgressForm.Max := Hauteur - 1;
for Y := 0 to Hauteur - 1 do
begin
FProgressForm.Position := Y; // Tu indiques où tu en es
for X := 0 to Largeur - 1 do
begin
Image1.Canvas.Pixels[X, Y] := clRed;
end;
end;
end;
Voila !
Sur ce, deux petits conseils : évite de mettre (je pense) la priorité d'un Thread à tpTimeCritical (cela veut dire que seul le thread pourra faire quelque chose, il va prendre toute les ressources de ton application, et l'affiche pourra alors ne pas se rafraichir comme voulu ; en quelque sorte tu perds tout l'interêt d'un thread...).
Enfin, ne change pas trop souvent la position de ta ProgressBar ou ProgressForm, car elle met du temps à se rafraichir, c'est pour ça que dans l'exemple ce-dessus, je l'ai mis dans la boucle Y et non X (ça aurait été plus précis mais beaucoup plus long).
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 11 nov. 2007 à 15:32
Et voilà les infos sur la propriété priority :
Priority peu prendre les valeurs suivantes :
tpIdle : le niveau de priorité le plus bas. Le thread suveille le moment où Windows ne fait rien
tpLowest : niveau de priorité le plus bas parmi les threads systématiquement exécutés
tpLower : priorité légèrement plus faible que la normale
tpNormal : priorité standard
tpHigher : priorité légèrement plus élevée que la normale
tpHighest : priorité la plus élevée ne bloquant pas les autres threads
tpTimeCritical : priorité la plus élevée, pouvant bloquer les autres threads
Il faut adapter son code à la situation donnée et surtout tester, re-tester,
re-re-tester et tester encore...(cf : Caribensila à qui je fais un petit coucou au passage)
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 17 janv. 2008 à 12:10
ProgressBar.Visible:=True;
ProgressBar1.Maximum := A définir;
ProgressBar1.Position := j;
inc(j, 1); a placer à diff endroits du code
ProgressBar.Visible:=False;
on peut aussi coupler le tout dans un SplashScreen.