Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit LixtBox, Stringlist und Memofeld (https://www.delphipraxis.net/148318-problem-mit-lixtbox-stringlist-und-memofeld.html)

punnzall 28. Feb 2010 16:40

Re: Problem mit LixtBox, Stringlist und Memofeld
 
Danke
Ich hab es vorher auch mit einer Stringlist versucht, das klappte auch solang ich den Inhalt im Programm in die Stringlist eingetragen habe
und dann auch sofort ins memo übernehme, jedoch habe ich probleme diese stringlist korrekt abzuspeichern.
Muss ich auf was achten wenn ich eine Stringlist, die sich in einem Record befindet, abspeichere ?
Die Stringlist wird korrekt geschrieben und später auch ausgelesen, nur gespeichert wird sie falsch.

Paar Schnipsel zum erklären (Variablennamen ersetzt !):
Delphi-Quellcode:
tRecord = record
  name : string[30];
  text : tstringlist;
end;

var Record : tRecord;
Delphi-Quellcode:
// So setz ich das Memo in eine Stringliste
text := TStringlist.Create;
for I:=0 to zeilenanzahl do // Zeilenanzahl enthält die Anzahl der Zeilen im Memo
begin
  Record.text.add(frmMain.memMain.lines[I]);
end;
Delphi-Quellcode:
procedure SaveRecord;
var I:integer;
    Fle : file of tRecord;
begin
  assignfile(Fle,filename);
  rewrite(Fle);
  for I:=1 to N do // N = Recordanzahl
  begin
    write(Fle,Record[I]);
  end;
  closefile(Fle);
end;
Wie gesagt - Innerhalb des Prgramms funktioniert es super, nur wenn ich die vorher abgespeicherte Datei lade scheint die Stringlist leer zu sein.
Auch in der datei selber finde ich keinen Inhalt der Stringlist.
(Der Rest des Records wird richtig abgespeichert und auch gelesen)
Ich nehme an, dass ich die Stringliste anders abepseichern muss ?

DeddyH 28. Feb 2010 16:43

Re: Problem mit LixtBox, Stringlist und Memofeld
 
Du darfst nicht die Stringliste an sich abspeichern (das ist nur ein Zeiger auf deren Instanz), sondern deren Inhalt. Das dürfte in einem Record aber schwierig werden.

punnzall 28. Feb 2010 16:44

Re: Problem mit LixtBox, Stringlist und Memofeld
 
Und wie könnte ich das Problem lösen ? :/

Jens Hartmann 28. Feb 2010 16:45

Re: Problem mit LixtBox, Stringlist und Memofeld
 
Hallo zusammen,

müsste das mit dem Speichern nicht so gehen...

Delphi-Quellcode:
Text := TStringList.Create;
...
Text.SaveToFile('.\MeinRecord');
Text.Free;
Gruss Jens

punnzall 28. Feb 2010 16:46

Re: Problem mit LixtBox, Stringlist und Memofeld
 
@Jens, ich möchte gerne den Record speichern, und nicht nur eine Stringlist :)
Die Stringlist befindet sich in diesem Record.
Mit dienem Code speichere ich nur die Stringliste.

DeddyH 28. Feb 2010 16:48

Re: Problem mit LixtBox, Stringlist und Memofeld
 
So in etwa. Du könntest dann noch den Namen (ist ja auch nur ein String) beim Speichern in die erste oder letzte Zeile der Stringlist schreiben, dann kannst Du sie nach dem Auslesen auch wieder zuordnen.

punnzall 28. Feb 2010 16:49

Re: Problem mit LixtBox, Stringlist und Memofeld
 
Mein Record enthält im meinem Code viel mehr Inhalt, ich habe es nur im vorigen Code auf die beiden beschränkt, um den Fall etwas besser erkärne zu können. :)

DeddyH 28. Feb 2010 16:53

Re: Problem mit LixtBox, Stringlist und Memofeld
 
Dann bliebe noch die Möglichkeit, die Stringliste wie von Jens gezeigt in einer Datei abzuspeichern und den Dateinamen als ShortString im Record abzulegen. Der Dateiname darf dann aber 255 Zeichen nicht überschreiten, zur Not müsstest Du ihn mit GetShortPathName in das alte DOS-Format bringen.

punnzall 28. Feb 2010 16:55

Re: Problem mit LixtBox, Stringlist und Memofeld
 
Gegen die Lösung habe ich ncihts einzuwenden, aber das Problem könnte werden, dass später im Ordner zu viele Dateien sind :S
Es werden nähmlich recht viele Memo Felder gespeichert.
Sollte es keine andere Lösung geben, werd ich darauf zurückgreifen.
Wäre aber froh wenn es dennoch eine andere Möglichkeit gäbe :)

Jens Hartmann 28. Feb 2010 16:56

Re: Problem mit LixtBox, Stringlist und Memofeld
 
Oder, je nach Art des Records, den Record durchlaufen und in eine eigene Stringliste schreiben und anschließend diese StringList z.B. speichern.

Oder, du musst den Record in einen DB schreiben.

Gruß Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 Uhr.
Seite 2 von 3     12 3      

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