Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : a jouter une ProgressbBAR [ Système / Exécution ] (TouffuS)

samedi 10 novembre 2007 à 00:41:44 | a jouter une ProgressbBAR

TouffuS

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

samedi 10 novembre 2007 à 21:40:20 | Re : a jouter une ProgressbBAR

TouffuS

Bonjour!

quelqu'un aurait une  idée svp?

Merci pour vos réponses!


samedi 10 novembre 2007 à 22:52:30 | Re : a jouter une ProgressbBAR

cedricbi




Le plus dur dans un programme c'est de savoir pourquoi il marche !

/FONT><</html>


samedi 10 novembre 2007 à 22:59:07 | Re : a jouter une ProgressbBAR

cedricbi

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...


Le plus dur dans un programme c'est de savoir pourquoi il marche !

/FONT><


samedi 10 novembre 2007 à 23:27:46 | Re : a jouter une ProgressbBAR

cantador

Membre Club

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


dimanche 11 novembre 2007 à 12:16:39 | Re : a jouter une ProgressbBAR

cedricbi

+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;


Le plus dur dans un programme c'est de savoir pourquoi il marche !


dimanche 11 novembre 2007 à 12:21:59 | Re : a jouter une ProgressbBAR

TouffuS

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.


dimanche 11 novembre 2007 à 12:53:56 | Re : a jouter une ProgressbBAR

cantador

Membre Club

@touffus :
la solution est de créer un Thread avec une forme et une barre de progression :
c'est le cas d'école..

L'avantage de cette technique est que lors d'un long traitement, l'application n'est plus blocante et donc permet à l'utilisateur de faire autre chose en attendant..
Il y a de multiples possibilités de se servir des Thread..
Je t'invite à consulter les nombreux tutoriaux sur le sujet qui sont très bien expliqués et faciles à comprendre :

Un extrait d'une variante de code possible pour faire cette opération :

unit UThread;

interface

uses
  Classes, SysUtils, Windows, Forms, Controls, UnitProgressForm, Dialogs;

type
  TMyThread = class(TThread)
  private
    { Déclarations privées }
    FProgressForm: TProgressForm;          //     @cedricbi

    procedure OnTerminateProcedure(Sender: TObject);

  protected
    procedure Execute; override;
  public
    constructor Create(Suspended: Boolean; Name: string);
  end;

implementation
uses Unit1, Systeme;

constructor TMyThread.Create(Suspended: Boolean; Name: string);
begin
  FreeOnTerminate := True;
  inherited Create(Suspended);
  FProgressForm := TProgressForm.Create(nil);
  FProgressForm.Show;
  OnTerminate := OnTerminateProcedure;
end;

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

end;

procedure TMyThread.OnTerminateProcedure(Sender: TObject);
begin
  if Assigned(FProgressForm) then
    FProgressForm.Release;
end;

et le lancement du Thread dans form1 :

implementation
uses  UThread;
procedure TForm1.LancerThread;
var
  MyThread_Prioritaire: TMyThread;
begin
  MyThread_Prioritaire := TMyThread.Create(False, 'Prioritaire');
  MyThread_Prioritaire.Priority := tpTimeCritical;
end;
....


cantador


dimanche 11 novembre 2007 à 13:18:29 | Re : a jouter une ProgressbBAR

TouffuS

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?

dimanche 11 novembre 2007 à 14:39:54 | Re : a jouter une ProgressbBAR

cedricbi

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).


1 2

Cette discussion est classé dans : jouter, progressbbar


Répondre à ce message

Sujets en rapport avec ce message



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,14 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.