Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fortschrittsanzeige bei Ladevorgang mir Read(); (https://www.delphipraxis.net/7884-fortschrittsanzeige-bei-ladevorgang-mir-read-%3B.html)

Yheeky 23. Aug 2003 19:08


Fortschrittsanzeige bei Ladevorgang mir Read();
 
Hi,

ich lade meine Daten wie folgt:

Code:
  Datei : File of TTest;
  Datenliste : TTest;

[...]

AssignFile(Datei,ProgrammPfad + test.dat');
Reset(Datei);
Read(Datei,Datenliste);
CloseFile(Datei);
Kann ich hierzu eine Fortschrittanzeige machen? Wenn ja, wie? Wüsste jetzt nicht, wo ich da ansetzen könnte. Danke schonmal!

Gruß Yheeky

Chewie 23. Aug 2003 19:23

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Mit der Funktion FileSize bekommst du die Anzahl der Datensätze der Datei. Das kannst du benutzen als Max-Wert deiner Fortschrittsanzeige.

Assarbad 23. Aug 2003 20:11

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Und TProgressBar nimmt man üblicherweise für eine Fortschrittsanzeige.

Chewie 23. Aug 2003 20:13

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Oder TGauge.

Matze 23. Aug 2003 20:24

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Ich würde Gauge empfehlen, denn dann steht, ohne dass man was coden muss, auch der Fortschritt in Prozent dabei..

Hansa 23. Aug 2003 20:36

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
ähhmmm, wo ist denn das TGauge? :shock: Also ich habe bestimmt in diesem Jahr 1.000-2.000 Seiten über Delphi gelesen, vom Internet ganz zu schweigen. In der OH ist das Wort ein einziges mal zu finden. Und das noch in Zusammenhang mit was ganz anderem und nur in der englischen. 8)

Chewie 23. Aug 2003 20:39

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Das ist in der Palette "Beispiel". Deshalb ist es wohl auch nicht dokumentiert.

Hansa 23. Aug 2003 20:55

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Ja, da ist es tatsächlich. 8) Aber im 5kg-Handbuch überhaupt nichts zu schreiben finde ich echt unverschämt. :evil:

P.S.: für 59 EUR extra :!:

Yheeky 23. Aug 2003 22:44

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Okay, danke schonmal. Mit FileSize kann ich also den Max-Wert auslesen. Wie aber kann ich die aktuelle Position auslesen?

Christian Seehase 23. Aug 2003 22:47

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Moin Yheeky,

indem Du einen Zähler mitlaufen lässt.

Yheeky 23. Aug 2003 22:49

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Versteh ich net :roll:

Chewie 23. Aug 2003 22:53

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Du liest doch die einzelnen Datensätze (in diesem Fall Records) in einer Schleife aus der Datei. Da du den Maximalwert kennst, wäre eine for-Schleife am geeignetesten. Somit gibt der Wert der Schleifenvariable den Fortschritt an.

Benutzt du eine repeat- oder while-Schleife, musst du selbst eine Integer-Variable als Zähler deklarieren und pro Lesevorgang um eins hochzählen.

Yheeky 23. Aug 2003 23:00

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Ich benutze im Moment keine Schleife. Der Code, den ich oben gepostet habe ist alles. Keine for, while oder sonstige Schleife...

Christian Seehase 23. Aug 2003 23:04

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Moin Yheeky,

dann wirst Du wohl auch keine Fortschrittsanzeige hinbekommen können.

Chewie 23. Aug 2003 23:05

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Ach so, ich sehe, du liest das Array in einem Rutsch aus der Datei.
So kannst du natürlich keine Fortschrittsanzeige implementieren, da du ja nur eine Aktion durchführst. Probiers mal so:

Delphi-Quellcode:
  Datei : File of TTest;
  Datenliste : TTest;
  i: Integer;

[...]

AssignFile(Datei,ProgrammPfad + test.dat');
Reset(Datei);
SetLength(DatenListe, FileSize(Datei));
for i := 1 to FileSize(Datei) do
  Read(Datei,DatenListe[i-1]);
CloseFile(Datei);
Jetzt hast du in i deinen Fortschritt stehen.

Yheeky 23. Aug 2003 23:13

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Bekomme 2 Fehlermeldungen:

Code:
[Fehler] Unit1.pas(84): Inkompatible Typen
[Fehler] Unit1.pas(88): Array-Typ erforderlich
bei den Zeilen

Code:
SetLength(Datenliste, FileSize(Datei));
Read(Datei,Datenliste[i-1]);

Chewie 23. Aug 2003 23:16

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Ach so, sorry, DatenListe muss ein Array of TTest sein, um mehrere Datensätze speichern zu können. Oder wofür sonst solltest du eine Fortschrittsanzeige brauchen, wenn nicht, um mehrere Datensätze auszulesen?

Yheeky 23. Aug 2003 23:20

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Möchte einfach überprüfen, wieviel Prozent des aktuellen Datensatzes bereits geladen wurde...

Luckie 23. Aug 2003 23:25

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Bei einem einzelnen Datensatz wirst du Pech haben.

Hansa 23. Aug 2003 23:38

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Oh je, was soll denn das da werden :?: Nebenbei bemerkt, Dein Source kann so nicht gehen. Du liest nur einen Record. Und das Filesize die Anzahl der Datensätze angibt halte ich für ein Gerücht. Das mit dem Array ist auch Blödsinn. @Chewie: Nix für ungut. :wink:

Der Record-Typ ist TTest. Die Größe ermittelst Du mit
Delphi-Quellcode:
sizeof (TTest);
Wohlgemerkt, von EINEM Datensatz :!:

Die Datei ist File OF TTest. Die Dateigröße kriegst Du jetzt mit
Delphi-Quellcode:
filesize (Datei);
raus.

Und das alles in bytes. Teilst Du nun filesize / sizeof so muß eine ganze Zahl herauskommen. Das ist die Gesamtanzahl der Datensätze. Jetzt kommt der Zähler ins Spiel. Setze den am Anfang auf 0 und bei jedem gelesenen Datensatz zählst Du eins hoch.

So und nun kommt die Progressbar oder die komische Gauge ins Spiel. Wie das geht weiß ich nicht, bisher noch nicht gebraucht. Du mußt da mit Sicherheit den Zähler in Bezug zur Gesamtgröße benutzen. Dürfte einfach sein, sofern die Vorarbeiten stimmen.

Chewie 23. Aug 2003 23:40

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Zitat:

Zitat von Hansa
Und das Filesize die Anzahl der Datensätze angibt halte ich für ein Gerücht. Das mit dem Array ist auch Blödsinn. @Chewie: Nix für ungut. :wink:

Ein Gerücht, das die Delphi-Hilfe in die Welt setzt:

Zitat:

ie Funktion FileSize gibt die Größe einer Datei in Byte zurück. Enthält die Datei Records, wird deren Anzahl zurückgegeben.
:wink:

Yheeky 23. Aug 2003 23:48

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Nächster Fehler bei SizeOf

Code:
[Fehler] Unit1.pas(82): Anweisung erforderlich, aber Ausdruck vom Typ 'Integer' gefunden

Hansa 23. Aug 2003 23:58

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
@Chewie: Stimmt, ich hatte die physikalische Größe der Datei gemeint. Das wäre dann File of Byte.

@Yheeky: sizeof ist eine Funktion, ansonsten nützt das ohne Source recht wenig.

Yheeky 24. Aug 2003 00:12

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
@Hansa: Schon klar, aber wie soll ich sie aufrufen? SizeOf(TTest) geht nicht, wie du es erwähnt hattest...

Hansa 24. Aug 2003 00:33

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Eine Funktion liefert einen Funktionswert zurück. 8) Wenn Du das nicht hinkriegst, dann vergesse die Progressbar.

Yheeky 24. Aug 2003 00:39

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Zitat:

Wenn Du das nicht hinkriegst, dann vergesse die Progressbar.
Hansa, also DAS bekomme ich gerade noch hin *g*. Dachte mein Parameter ist schon falsch, deswegen hatte ich mich nicht weiter damit beschäftigt. Danke.

Aya 24. Aug 2003 00:56

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Hi,

schau dir mal dashier an: http://www.delphipraxis.net/internal...ect.php?t=8211 ;)

Au'revoir,
Aya~

Yheeky 24. Aug 2003 12:34

Re: Fortschrittsanzeige bei Ladevorgang mir Read();
 
Ich arbeite zwar nicht mit Streams, aber ich schau´s mir mal an, danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz