schafphil
Messages postés1Date d'inscriptionjeudi 13 mai 2004StatutMembreDernière intervention14 avril 2009
-
14 avril 2009 à 08:46
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 2016
-
14 avril 2009 à 17:31
Bonjour,
J'ai fait un programme avec Delphi 7 Studio et j'ai le problème suivant. Dans mon programme j'ai une procedure qui lit un fichier texte et l'affiche sur un Memo. Tout fonctionne correctement mais lors de la lecture/écriture si le fichier est long j'ai mis un bouton "Stop" pour permettre a l'utilisateur d'interrompre la procedure. Malheureusement lors de la lecture/ecriture tous les composants de la Form (Menu,bouton ...) sont inactifs.
Comment puis-je faire pour que le bouton "Stop" reste actif lors la boucle lecture/ecriture.
Voici un extrait de la procedure:
procedure TForm1.Listedufichier1Click(Sender: TObject);
begin
lecturefichier := true;
AssignFile(infile,infilename);
{$I-}
Reset(infile);
{$I+}
if (IOResult = 0) and then
begin
Memo1.Show;
Memo1.Clear;
Button2.Show;
Repeat
if lecturefichier = true then exit;
Readln(infile, Ligne);
Memo1.Lines.Add(Ligne);
Until EOF(infile);
CloseFile(infile);
end;
end; {--- ListduInFichier1Click ---}
Le bout de code que tu donnes ne peut pas fonctionner :
procedure TForm1.Listedufichier1Click(Sender: TObject);
begin
lecturefichier := true;
...
Repeat
if lecturefichier = true then exit;
...
CloseFile(infile);
end;
end;
Sinon pour répondre à ta question : Il suffit de defreezer l'application
var
Form1: TForm1;
lecturefichier:boolean;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
infile:TextFile;
ligne:string;
begin
AssignFile(infile,'C:\test.txt');
{$I-}
Reset(infile);
{$I+}
if (IOResult = 0)then
begin
Memo1.Clear;
Button2.Show;
Repeat
if lecturefichier = true then exit;
Application.ProcessMessages;
Readln(infile, Ligne);
Memo1.Lines.Add(Ligne);
Until EOF(infile);
CloseFile(infile);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
LectureFichier := true;
Memo1.Hide;
Button1.Hide;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
lecturefichier:=false;
end;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 14 avril 2009 à 17:06
j'explique :
Depuis l'apparition des TStream, TStrings et autre composants derivé, il est declaré comme obsolete d'acceder a un fichier texte avec TextFile, Assign, Reset etc.
si TMemo/TListBox tu n'as pas besoin (lecture du texte sans affichage) utilise la classe TStringList.
var
TxtFile : TStringList;
procedure NextStep;
var N : integer;
begin
if TxtFile.Count <> 0 then
begin
TxtFile.BeginUpdate;
Try
for N := 0 to TxtFile.Count-1 do
begin
// Traitement
end;
Finally
TxtFile.EndUpdate;
end;
end;
end;
procedure TForm1.Form1Create(Sender: TObject);
begin
TxtFile := TStringList.Create;
end;
procedure TForm1.Form1Destroy(Sender: TObject);
begin
TxtFile.Free;
end;
procedure TForm1.ButtonOpenClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
TxtFile.LoadFromFile( OpenDialog1.FileName );
NextStep;
end;
end;
<hr size="2" width="100%" />
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 14 avril 2009 à 17:31
Et est-ce obsolète d'appeller directement Read/WriteFile depuis Delphi également ? Moi je m'en sers souvent, ça peut être très utile dans certaines situations ...