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