begin process at 2012 02 11 11:47:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Exécution

 > 

a jouter une ProgressbBAR


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

a jouter une ProgressbBAR

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 Administrateur CodeS-SourceS

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 Administrateur CodeS-SourceS

@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ée dans : jouter, progressbbar


Répondre à ce message

Sujets en rapport avec ce message



Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales