Ajout composant visuel dans un tstatusbar

Soyez le premier à donner votre avis sur cette source.

Vue 4 731 fois - Téléchargée 334 fois

Description

L'exemple présenté ici permet d'insérer un composant TProgressBar dans la première partie d'un TStatusBar à l'éxécution, de faire évoluer l'affichage (ici au cours d'une simple boucle repeat..until) et de libérer les ressources allouées au début du traitement.

Source / Exemple :


procedure TForm1.Button1Click(Sender: TObject);
var
  //Pour abréger l'écriture :
  SB : TStatusBar;
  //Déclaration d'un TProgressBar
  PB : TProgressBar;
  //variable de compteur
  i : integer;
  //structure de type rectangle
  Rect : TRect;
begin
  //Sb reprends les valeurs de StatusBar1
  Sb := StatusBar1;

  //Récupération des coordonnées
  Rect := SB.ClientRect;

  //Création à l'éxécution
  PB := TProgressBar.Create(Self);
  with PB do
  begin
    //Le composant qui va accueillir le ProgressBar
    Parent := StatusBar1;

    //Définition des coordonnées dynamiquement
   SetBounds(Rect.Left + 2,  Rect.Top + 2, SB.Panels[0].Width - 2, Rect.Bottom - 2);

    //Paramètrage des valeurs de départ
    // ici de 0 à 2000 par pas de 5
    Min := 0;
    Max := 20000;
    Position := Min;
    Step := 5;

    //Entrée dans une boucle d'affichage
    {ATTENTION : en utilisant une boucle FOR car l'incrémentation de i est
    toujours de 1, alors que celle créée par la méthode StepIt est variable.
    Celà peut engendrer des effets inattendus !}
    i:=Min;
    repeat
      inc(i, Step);
      //Déplacement du curseur visuel
      StepIt; //voir également : Position:= i;
      {Comme certains traitements peuvent être longs,
      ne pas oublier de rendre la main au système entre deux}
      Application.ProcessMessages;
    until i=max;
    //Destruction du composant
    Free;
   {Libération des ressources allouées à la copie
    de StatusBar1}
    SB := NIL;
  end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  //Le premier Panel de StatusBar1 occupe les 3/4 de la largeur
  //et sera dessiné en cas de redimensionnement pendant le traitement
  //dans la boucle
  StatusBar1.Panels[0].Width:=round(StatusBar1.Width * 3 / 4)
end;

Conclusion :


C'est un vieux truc classique mais certains en redemandait ces derniers temps

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
26
NB : ce code a été écrit avec Delphi 4 qui ne disposait pas de la procédure FreeAndNil (apparue avec Delphi 5).
cs_chtom
Messages postés
5
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
27 décembre 2002

Code source pas trés "propre"

//Création à l'éxécution
PB := TProgressBar.Create(Self);
With PB do
begin
(...)
Free;
sb := nil;
end



Mieux vaut ecrire

//Création à l'éxécution
PB := TProgressBar.Create(Self);
With PB do
try
finally
FreeAndNil(PB);
end

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.