Utilisation de TProgressbar [Résolu]

Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
10 juin 2005
- - Dernière réponse : elementalord
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
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...
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
0
Merci
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
Commenter la réponse de florenth
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
10 juin 2005
0
Merci
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.
Commenter la réponse de elementalord
Messages postés
168
Date d'inscription
mercredi 8 octobre 2003
Dernière intervention
10 novembre 2008
0
Merci
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
Commenter la réponse de moldov
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
10 juin 2005
0
Merci
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;
Commenter la réponse de elementalord
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
10 juin 2005
0
Merci
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!!!
Commenter la réponse de elementalord

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.