Utilisation de TProgressbar

Résolu
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 - 8 juin 2005 à 17:16
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 - 10 juin 2005 à 09:05
bonjour à tous!!je voudrai utiliser le composan tprogressbar.C'est pour qu'il m'affiche la progression d'un programme quand il est en cours d'exécution.Soit il me l'affiche dans une autre fenetre ou soit dans la même fenetre principale.Yotait il quelqu'un qui pourrait m'aider?je ne suis qu'un debutant sous delphi...

6 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
9 juin 2005 à 17:47
Simple:

<hr size= "2" width="100%">PB.Max:=Taille -1;

PB.Min:=0;

for i: =0 to Taille-1 do

begin

PB.Position:=i;

Application.ProcessMessages;

Seek(...);

[...]

<hr size="2" width="100%">
Si tu ne te plantes pas ......
tu ne poussera jamais
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
8 juin 2005 à 20:38
Salut,

C'est bien simple, le composant TPrtogressBar possède trois propriétés essentielles:

- Min: Integer Il s'agit de la valeur minimale de la progressbar. (Ex: tu as une boucle for i.10 to 50 do ... - ici Min 10).

- Max: Integer Pareil que Min mais pour la valeur maximale (dans l'ex cela donne 50)

- Position: Integer. C'est cette propriété qui doit être mise à jour
pendant la progression de la tache. (Ici, dnas le cas d'une boucle for,
Position = i).



Un petit exemple (PB est mon TProgressBar):

<hr size="2" width="100%"> procedure TMafiche.MaProcedureLongue;

var

i: Integer;

begin

{ Initialiaation des propriétés. }

PB.Min: =25;

PB.Max:= 250;

PB.Position:=0;

{ Boucle. }

for i:=25 to 250 do

begin

{ La tache s'execute ici pour chaque valeur de i. }

Sleep(8); // Ici , on ne fait qu'attendre.

{ Actualisation de la ProgressBar. }

PB.Position: =i; // M-A-J de la position.

Application.ProcessMessages; // Cette ligne permet à la fenetre de ne pas se figer et à la progressbar de se reafficher.

end;

{ Fin: on remet la position à 0. }

PB.Position:= 0;

Showmessage('Fini.');

end;

<hr size ="2" width="100%">

Et voila, rien de plus simple.

Pour tester, tu peux copier cette procedure dans un evenement OnClick ou autre.



@ ++

Florent


Si tu ne te plantes pas ......
tu ne poussera jamais
0
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 1
9 juin 2005 à 09:50
Merci beaucoup mais le truc c'est comment je fait pour l'utiliser quand le programme fait une lecture et une écriture à l'exécution ,durant celà je voudrai que le progressbar tourne aussi pour voir sa progresssion et qu'à la fin de la lecture et écriture d'un fichier le progressbar prend fin.Dans ce cas la valeur de PB.max sera une variable de type réelle et pour la boucle au lieu de mettre for i:=25 to 250 je dois mettre par exemple for i:= 25 to j do... alors pour la variable "j" je ne vois pas comment le lier avec la durée de l'exécution du programme.
0
moldov Messages postés 165 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 10 novembre 2008
9 juin 2005 à 11:59
Salut



Il faudrait savoir ce que tu lit et comment tu le lit, si tu pouvais
mettre ton code dans lequel tu voudrais integré ta progress bar ca
serais plus simple pour t'aider.



Bonne Prog
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 1
9 juin 2005 à 12:20
voici la parie de mon programme ou je veux intégré mon progressbar:

procedure TForm1.Button1Click(Sender: TObject);
{ Bouton pour exécuter le traitement du fichier source sélectionné }
var
fichOrig : string;
fichDest : string;
com : string;
taille : integer;
long : integer;
i : integer;
h1 : TTime;
h2 : TTime;
dh : TTime;
ref : TTime;
diff : string;
nbl : integer;
k : integer;
lign : integer;
kl : integer;
dr : boolean;
mess : string;
f : integer;
compt : integer;
begin
dr := false;
lign := listbox1.items.Count - 1;
for kl := 0 to lign do
begin
if listbox1.items.strings[kl] <> '' then
dr := true;
shape1.Brush.Color := clred;
shape1.pen.color := clred;
label8.Caption := 'En cours...'; //Le voyant devient rouge à l'exécution du programme
progressbar1.Visible := true;
end;
if dr = false then //si la liste est vide
begin
mess :='Liste vide'; //envoie d'un message d'avertissement
messagedlg(mess,mtwarning,[mbok],0);
end;
application.processmessages;//permet à windows de finir de traiter tous ses
//évènements avant de continuer


nbl := listbox1.Items.count-1;
fichOrig := FileListBox1.FileName;
AssignFile( fichdata, fichOrig);//assigne le nom fichdata au fichier source
if FileExists(fichOrig) then //sélectionné
begin //si le fichier existe
try
Reset(fichdata);//l'ouvrir
taille := filesize( fichdata);
for i := 0 to (taille-1) do
begin
Seek( fichData, i);
Read( fichData, data);//lecture du fichier ouvert


for k := 0 to nbl do
begin
com := listbox1.items.strings[k]; //lecture de la liste
FichDest := GetCurrentDir + '\' + listbox1.items.strings[k] + '.txt';
datatxt.datte := datetostr(data.datteheur);
datatxt.heure := timetostr(data.datteheur);//conversion d'un
datatxt.etat := data.etat; //fichier binaire
datatxt.omc := inttohex(data.omc,2); //en fichier texte
datatxt.country := inttohex(data.country,2);
datatxt.common := inttohex(data.common,4);
datatxt.system := inttohex(data.system,4);
datatxt.net := inttohex(data.net,4);
datatxt.alarme := inttohex(data.alarme,2);
datatxt.rssi := inttohex(data.rssi,2);
datatxt.reserve := inttostr(data.reserve); if ((( radioButton1.checked true) and ( datatxt.datte com)) or (( radioButton2.checked true) and ( datatxt.heure com)) or (( radioButton3.checked true) and ( datatxt.etat com)) or (( radioButton4.checked true) and ( datatxt.omc com)) or (( radioButton5.checked true) and ( datatxt.country com)) or (( radioButton6.checked true) and ( datatxt.common com)) or (( radioButton7.checked true) and ( datatxt.system com)) or (( radioButton8.checked true) and ( datatxt.net com)) or (( radioButton9.checked true) and ( datatxt.alarme com)) or (( radioButton10.checked true) and ( datatxt.rssi com))) then
begin//choix d'un élément parmi dix à cocher
AssignFile( fichResult, fichDest);//assigne le nom fichresult
//au fichier d'enregistrement
if FileExists( fichDest) then
begin //s'il existe
try
Reset( fichresult); //l'ouvrir
long := FileSize( fichResult);
Seek( fichResult, long-1);//se positionne à l'avant dernière
//ligne du fichier
Read( fichResult, ancDataTxt);//lecture du fichier
//d'enregistrement
h1 := StrToTime( ancDatatxt.heure);
h2 := StrToTime( datatxt.heure);
dh := h2-h1;
diff := TimeToStr( dh);
ref := StrToTime(Edit1.Text+':'+Edit3.Text+':'+Edit4.Text);
if ( dh > ref) then datatxt.reserve := '* ' + diff;
Seek( fichResult, long);//se positionne à la dernière
//ligne du fichier
Write( fichResult, dataTxt);//écriture dans le fichier
CloseFile( fichResult); / /ferme le fichier d'enregistrement


except
raise
end;
end
else
begin
try
Rewrite( fichResult);//si le fichier d'enregistrement
//n'existe pas alor le créer
Write( fichResult, datatxt);//écriture dans le fichier
Closefile( fichResult);//fermeture du fichier
except //d'enregistrement
raise
end;
end;
end;
end;
end;
closefile( fichdata);//fermeture du fichier lu


shape1.Brush.Color := cllime;
shape1.pen.color := cllime;
label8.caption := 'Prêt';//le voyant devient vert à la fin du traitement
//du fichier source


except
raise
end;
end;
end;
0
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 1
10 juin 2005 à 09:05
Merci florenth, finalement c'était simple!! j'avais mal placé dans le programme la valeur du PB.Max et du PB.Min et egalement la boucle c'est pour sa que je vois tout le temps défiler le progressbar jusqu'à la fin du programme.Merci beaucoup!!!
0
Rejoignez-nous