Autor Beitrag
Melanie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 13.10.02 10:02 
Also ich möchte in ein Richedit Dateien laden,da die Dateien sehr groß sind ca 10 bis 30 MB dauert das ein bißchen.Darum möchte ich den Ladevorgang mit Hilfe einer Gauge grafisch darstellen.
Wie bestimmt man da die Dateigröße ,über Richedit.lines.count geht das
ja nicht da die Datei sich noch nicht im Richedit befindet?.
Bei den Dateien handelt es sich ausschließlich um Textfiles.

MFG Melly :?
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: So 13.10.02 18:40 
Du könntes vielleicht mittels Stream die Datei step by step einlesen und dann jedesmal die Progressbar aktualisieren. So etwa:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
var
   fs: TFileStream;
   temp: string;
   i: integer;
begin
   fs := TFileStream.Create('C:\einedatei.txt', fmOpenRead or fmShareDenyWrite);
   ProgressBar1.Max := fs.size div 1000 + 1; { +1 bewirkt, das die Schleife nicht einmal zu wenig ausgeführt wird, da div rundet}
   SetLength(temp, 1000);
   for i := 0 to ProgressBar1.Max do;
   begin
      fs.Read(PChar(temp)^, 1000);
      RichEdit1.Text := RichEdit1.Text + temp;
      ProgressBar1.Position := i;
   end;
   fs.Free;
end;


Es muss natürlich nicht immer nur 1000 genommen werden... :wink:

Hoffe es entspricht deine Vorstellungen.

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 13.10.02 22:54 
Also dein Topic, sagt was anderes, als was du willst. Die dateigröße bekommst du so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function MyGetFileSize(const Filename: string): TULargeInteger;
var
  Find: THandle;
  Data: TWin32FindData;
begin
  Result.QuadPart := -1;
  Find := FindFirstFile(PChar(Filename), Data);
  if (Find <> INVALID_HANDLE_VALUE) then
  begin
    Result.LowPart := Data.nFileSizeLow;
    Result.HighPart := Data.nFileSizeHigh;
    Windows.FindClose(Find);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := IntToStr(MygetFileSize('c:boot.ini').QuadPart);
end;
Melanie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Do 17.10.02 18:23 
Titel: Dateigröße bestimmen
Hallo ,danke erstmal für Eure Antworten.Das bringt mich wieder ein Stück weiter.


MFG Melly :oops:
Emmis
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 30.10.02 20:25 
Hallo Melanie,

sieh dir mal das Beispiel zu Fileread in der Hilfe an.

Kleine Korrektur im Quellcode: hinter Buffer ein ^ setzen
ausblenden Quelltext
1:
iBytesRead = FileRead(iFileHandle, Buffer^, iFileLength);					


Bemerkung am Rande:
Grafiken zur "Beschäftigung" des User bei länger dauernden Operationen sind ganz nützlich, verlangsamen aber ungemein den gesamten Vorgang.


m.f.g. emmis
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Mi 30.10.02 22:35 
Es ist wissentschaftlich bewiesen, das eine visuelle Fortschrittsanzeige den Prozess zu verkürzen scheint (es kommt einem so vor). Deswegen hat Microsoft bei der XP-Reihe auch so eine Schöne Progressbar beim Booten implementiert. Muss aber zugeben, dass das Paradox klingt: Die Visualiesierung des Progresses verlängert die ihn physisch, verkürtzt ihn aber gleichzeitig psychisch. Doch glaube ich nicht, das bei heutigen Prozessoren die Routine für eine Fortschrittsanzeige gravierend den Prozess verlangsamt.

nur so am Rande :wink:

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...