Du skal køre din fillæsning i en anden tråd end brugergrænsefladen. Derved kan brugeren interagere med brugergrænsefladen, mens processoren arbejder med den anden tråd.
... procedure TForm1.OnAbortClick(Sender : TComponent); begin fDoExit := true; end;
procedure TForm1.ReadHumongousTextFile(aFilename : string); var fp : textfile; begin fDoAbort := false; assignfile(fp,aFilename); if not fileexists(aFilename) then exit; Reset(fp); try while not (eof(fp) or fDoAbort) do begin readln(fp,st); Application.ProcessMessages; end; finally closefile(fp); end; end;
Hej!, fik noget kode af en kammerat, som meget ligner hrc's forslag. Dog gøres det inde i selve while-løkken som foreslået af martinlind. Vil I dele points eller???
Det synes jeg Martin skal bestemme. Jeg har bare beskrevet hans svar og var jeg ikke kommet først, så havde han sikkert selv gjort det.
I øvrigt. Sådan en ProcessMessages er halv tung at danse med. Hvis du skal indlæse mange linjer så er det dumt at fyre en ProcessMessages af hver gang. Du kan der bruge noget lignende dette:
var i : integer; begin i := 0; .. while not (eof(fp) or fDoAbort) do begin readln(fp,st); inc(i); if (i mod 100) = 0 then Application.ProcessMessages; end; end;
Hej begge, kan godt se "æ problem"; men indtil nu har det virket upåklageligt.
I deler point. Tak for Jeres hjælp!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.