A jouter une ProgressbBAR

TouffuS Messages postés 4 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 11 novembre 2007 - 10 nov. 2007 à 00:41
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 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.

PAscal

11 réponses

TouffuS Messages postés 4 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 11 novembre 2007
10 nov. 2007 à 21:40
Bonjour!

quelqu'un aurait une  idée svp?

Merci pour vos réponses!
0
cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 mars 2011
10 nov. 2007 à 22:52
<hr />
Le plus dur dans un programme c'est de savoir pourquoi il marche !

/FONT><</html>
0
cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 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 !

/FONT><
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
10 nov. 2007 à 23:27
Sympa aussi de mettre la TprogressBar dans une TProgressForm
et faire apparaître et disparaître le tout dans un Thread :

Type   
FProgressForm: TProgressForm;
...

Procedure Thread.Execute;
begin
FProgressForm := TProgressForm.Create(nil);
FProgressForm.Show;
....
....
end;

Il y des exemples ici ou là..
cantador
0

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

Posez votre question
cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 mars 2011
11 nov. 2007 à 12:16
+1 pour le code proposé par Cantador mais par contre on ne déclare pas FProgressForm dans un type mais plutot dans un var.
Comme ceci  :

var
FProgressForm: TProgressForm;

<hr />Le plus dur dans un programme c'est de savoir pourquoi il marche !
0
TouffuS Messages postés 4 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 11 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?

Merci.
0
TouffuS Messages postés 4 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 11 novembre 2007
11 nov. 2007 à 13:18
Bonjour,

Ok merci pour ce code bien compliqué! :)
Je vais essayer de m'en sortir alors.
Juste deux questions:

Il faut que l'insère  mon code ici, ou toute l'application?:

procedure TMyThread.Execute;
var
..
begin
// tu mets ici ton code à exécuter

end;

On ne peut pas simplement faire démarrer la progressbar sur l'action d'un bouton et la faire terminer sur la fin de l'action?
0
cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 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
   
   Largeur := Image1.Width:
   Hauteur := Image1.Height;

   { 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).
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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)

cantador
0
kevinou55 Messages postés 15 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 12 février 2008
17 janv. 2008 à 11:47
Si tu veux faire simple, tu peux juste fire un
ProgressBar.Visible:=True;
ProgressBar.Position:=10;

et au fil de ton code du glisse des   ProgressBar.Position :=30 ... 40 ... 50 jusqu'a 100 a la fin de tes traitements

et a la fin des traitements
ProgressBar.Visible:=False;

Mais ce n'est pas la meilleure chose a faire

kevin
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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.
0
Rejoignez-nous