silvergoldsilver
Messages postés21Date d'inscriptionvendredi 9 octobre 2009StatutMembreDernière intervention17 septembre 2012
-
28 avril 2012 à 15:59
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 2018
-
23 mai 2012 à 20:03
Bonjour,
Est-il possible de gérer un ProgressBar dans une boucle repeat...until ?
Et si oui, comment ?
Où placer Min, Max, Position, Step, StepIt ?
J'ai tout essayé, ça ne fonctionne pas.
Il s'agit d'un programme qui lit et affiche des fichiers. Dans ce programme, une procedure renvoie la taille du fichier sans l'ouvrir. Voici la boucle en question que j'ai trouvée sur le site :
repeat
BlockRead(F, Buf, SizeOf(Buf), Lus);
Memo.Lines.Text:= Memo.Lines.Text + Buf;
until (Lus = 0);
silvergoldsilver
Messages postés21Date d'inscriptionvendredi 9 octobre 2009StatutMembreDernière intervention17 septembre 2012 29 avril 2012 à 16:38
Bonjour,
Merci Jean_Jean. Je vais essayer ça tout de suite. C'est vrai que je n'avais pas pensé à utiliser Position et Max dans until, du fait que j'avais déjà
Lus = 0
A+
sgs
silvergoldsilver
Messages postés21Date d'inscriptionvendredi 9 octobre 2009StatutMembreDernière intervention17 septembre 2012 29 avril 2012 à 18:14
Bonjour,
Malheureusement, ça fonctionne mal, le programme est ralenti considérablement.
Comment trouver la bonne valeur de Step par rapport à la taille du fichier.
Voici la procedure en question :
procedure TForm1.Ouvrir1Click(Sender: TObject);
var
F: File;
Lus: Integer;
Buf: array[1..1024] of Char;
begin
{$I-}
If OpenDialog1.Execute Then
begin
Form1.Memo.Cursor:= crHourGlass;
AssignFile(F, OpenDialog1.FileName);
Form1.Label1.Caption:= OpenDialog1.FileName; //Affiche le nom du Fichier
GetFileSize(OpenDialog1.FileName); //Appel Fonction Taille du Fichier qui renvoie Maxi
Form1.ProgressBar1.Min:= 0;
Form1.ProgressBar1.Max:= Maxi;
Form1.ProgressBar1.Step:= 10;
silvergoldsilver
Messages postés21Date d'inscriptionvendredi 9 octobre 2009StatutMembreDernière intervention17 septembre 2012 1 mai 2012 à 12:40
Bonjour,
Voilà ce que j'ai trouvé pour faire fonctionner le ProgressBar dans la boucle repeat...until : utiliser la valeur du array dans position.
procedure TForm1.Ouvrir1Click(Sender: TObject);
var
F: File;
Lus: Integer;
Buf: array[1..1024] of Char;
begin
{$I-}
If OpenDialog1.Execute Then
begin
Form1.Memo.Cursor:= crHourGlass;
AssignFile(F, OpenDialog1.FileName);
Form1.Label1.Caption:= OpenDialog1.FileName; //Affiche le nom du Fichier
GetFileSize(OpenDialog1.FileName); //Appel Fonction Taille du Fichier qui renvoie Maxi
Form1.ProgressBar1.Min:= 0;
Form1.ProgressBar1.Max:= Maxi;
Reset(F,1);
repeat
BlockRead(F, Buf, SizeOf(Buf), Lus);
Memo.Lines.Text:= Memo.Lines.Text + Buf;
Form1.ProgressBar1.Position:= Form1.ProgressBar1.Position + 1024; //1024 c'est la taille de array
until (Lus = 0);
Form1.Label2.Caption:= IntToStr(FileSize(F)) + ' ' + 'octets'; //Affiche la taille du Fichier en octets
CloseFile(F);
Form1.Memo.Cursor:= crDefault;
{$I+}
end;
end;
Pour les gros fichiers, la lecture est très lente, mais ça fonctionne.
A+
sgs