A jouter une ProgressbBAR

Signaler
Messages postés
4
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
11 novembre 2007
-
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
-
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

Messages postés
4
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
11 novembre 2007

Bonjour!

quelqu'un aurait une  idée svp?

Merci pour vos réponses!
Messages postés
185
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
21 mars 2011

<hr />
Le plus dur dans un programme c'est de savoir pourquoi il marche !

/FONT><</html>
Messages postés
185
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
21 mars 2011

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><
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
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
Messages postés
185
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
21 mars 2011

+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 !
Messages postés
4
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
11 novembre 2007

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.
Messages postés
4
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
11 novembre 2007

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?
Messages postés
185
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
21 mars 2011

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).
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
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
Messages postés
15
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
12 février 2008

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
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
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.