PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TStringList Grösse ändern?


heiko
11.02.2002, 15:06
Ich möchte den Inhalt einer TSringList in einer Datei speichern. Jetzt ist aber bei 64k Schluss.
Wenn ich über die Capacity Eigenschaft einen grösseren Wert zuweise kommt es zu Laufzeitfehlern.
Wie kann ich die Grösse der String Liste bestimmen.


nj0y
11.02.2002, 15:54
Könnte es sein, daß Du eine ziemlich alte Version von Delphi oder von Deinem Betriebssystem benutzt? Ich kann mich nicht erinnern, jemals Probleme mit einer 64-KB-Grenze bei TStringList gehabt zu haben (nur bei TRichEdit...).

Ich hab´s auch gerade mal probiert (C++Builder 5, Windows 2000 SP1), hab ne 80-KB-Datei mit TStringList.SaveToFile geschrieben.

Evtl. mal die Patches von http://www.borland.de ausprobieren!?

Felix Kaiser
11.02.2002, 16:03
Eine direkte Grenze gibt es nicht und die einzige mir bekannte 64KB Grenze gibt es bei Windows95 mit TMemo und ähnlichen Feldern, vermutlich durch 64K Begrenzung von Stringlisten.

heiko
11.02.2002, 19:09
Genau Guru ich versuche den Inhalt eines TMemo abzuspeichern. Hab ich da eventuell etwas übersehen?
Und zwar sieht das so aus:

NachLi := TStringList.Create;
NachLi := Form7.Memo1.Lines;
NachLi.SaveToFile(verz + ´\´ + FormatDateTime(´d-m-yyyy_h-nn-ss´,now) + ´.log´);

Ist vieleicht TMemo schon die falsche Komponente?

nj0y
11.02.2002, 19:12
Genau, TMemo ist unter Win9x auf 64 KB begrenzt. Vielleicht schafft eine aktuelle COMCTL32.DLL Abhilfe. Aber sicherer ist auf jeden Fall die Verwendung einer anderen Komponente.

heiko
11.02.2002, 20:31
jo danke mal wieder
Ich hab jetzt TRichEdit genommen und damit funzt es ohne Probs.

nj0y
12.02.2002, 07:50
Original von heiko
Ich hab jetzt TRichEdit genommen und damit funzt es ohne Probs.

Aber nur auf aktuellen Systemen. Wenn Du Dein Programm weitergeben willst, solltest Du darauf achten, daß ältere Windows-Versionen (ich glaub bis einschließlich Win98 First Edition) eine buggy Implementation von TRichEdit haben, so daß da auch nur 64 KB möglich sind. Läßt sich aber durch´s Updaten der COMCTL32.DLL beheben.

Felix Kaiser
12.02.2002, 14:34
Genau, TMemo ist unter Win9x auf 64 KB begrenzt.
Nur unter Windows95, ab Win98 unbegrenzt.

Und an dem Code:

NachLi := TStringList.Create;
NachLi := Form7.Memo1.Lines;
NachLi.SaveToFile(verz + ´´ + FormatDateTime(´d-m-yyyy_h-nn-ss´,now) + ´.log´);


Erstens weißt du 2 Werte einer Variable zu und zweitens kannst du doch direkt FormX.MemoX.Lines.SaveToFile() machen, da es ja auch ein ganz normales TStringList Objekt ist. Genauso dann bei RichEdit etc ... halt überall wo es sich um TStringList handelt.

heiko
12.02.2002, 17:55
Hi Guru,
ich habe Win98SE und trotzdem nur 64k grosse Dateien.
Ist da schon wieder ein Unterschied zu Win98?
Ein Update der comctl32.dll hat auch nichts gebracht.
Wie verhält sich die Anwendung unter NT,XP oder Win2000
sind da mehr wie 64k drin oder ist das abhängig unter welchem System kompiliert wird?
Mit dem code hast Du natürlich Recht, so ist das Unsinn.
Ich habe hier ein Buch nachdem ich immer ein TStringList.Create machen muss damit ich damit arbeiten kann.
Wenn ich das jetzt richtig verstanden habe ist das überflüssig da Formx.Memox.Lines schon TStrings sind?
So schnell kann man sich Fehler angewöhnen.
Auf jeden Fall funktioniert es auch ohne TStringList.Create und wieder was dazu gelernt.

Felix Kaiser
13.02.2002, 17:54
"Eigentlich" ist ab Windows98 wirklich keine 64K Grenze mehr, war nur auf älteren NT und Win95. Im Windows Editor von Win95 weiß ich noch konnte ich nicht größere Dateien als 64KB bearbeiten, oft sogar weniger als 64KB. Aber auf Win98 konnten die schon beliebig groß sein. Vielleicht hat dein System einen Bug? Zu alte Memokomponente? Zu alte DLL irgendwo hineingerutscht? Wenn es mit RichEdit funktioniert, dann passe dir doch ein RichEdit als Memo an und verwende dies. Welche Delphi Version benutzt du?

heiko
13.02.2002, 18:24
Ich benutze eine Delphi 5 Enterprise Trial Version.
System Bug kann natürlich sein denn mittlerweile hab ich schon fast ein Jahr kein Format c: machen müssen.
Eine zu alte DLL ist auch möglich. Wer soll das schon so einfach sagen bei dem DLL Dschungel, im Augenblick gerade
3240 DLL´s, auf meinem System.