Autor |
Beitrag |
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Di 09.09.08 22:13
Hallo,
ich habe eine ListBox. Mit jedem Eintrag ist ein selbstdefiniertes Objekt (TTermin) verknüpft. Wenn ich jetzt die ListBox per SaveToFile speichere und wieder lade, sind die Objekte weg. Wie kann ich die Objekte mitspeichern/laden? 
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 09.09.08 22:54
Moin!
freak4fun hat folgendes geschrieben: | ich habe eine ListBox. Mit jedem Eintrag ist ein selbstdefiniertes Objekt (TTermin) verknüpft. |
Zeig doch mal die Deklaration der Klasse.
freak4fun hat folgendes geschrieben: | Wenn ich jetzt die ListBox per SaveToFile speichere und wieder lade, sind die Objekte weg. |
Das ist klar, .SaveToFile speichert nur die Strings.
freak4fun hat folgendes geschrieben: | Wie kann ich die Objekte mitspeichern/laden?  |
Die Listbox-Einträge in einer Schleife durchgehen und die einzelnen Objekte speichern/laden.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Di 09.09.08 22:57
Aktuell sieht die Klasse so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| TTermin = class public Text: String; Time: TDateTime; Fest: Boolean;
constructor Create(AStunde, AMinute: Integer; AFest: Boolean; AText: String); Overload; function getTermin: String; end; |
Sie soll aber jetzt erweitert werden, daher mein Anliegen.
Ich bin zur Zeit noch am Anfang, also würde auch eine andere Darstellung als die ListBox in Frage kommen. Zum Beispiel StringGrid oder ListView. Da darf dann die Darstellung/Speicherung auch kein problem sein.
Ich bin also für Vorschläge offen. 
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 09.09.08 23:10
Moin!
freak4fun hat folgendes geschrieben: | Ich bin zur Zeit noch am Anfang, also würde auch eine andere Darstellung als die ListBox in Frage kommen. Zum Beispiel StringGrid oder ListView. Da darf dann die Darstellung/Speicherung auch kein problem sein.  |
Da ist die erste Problemstelle: nicht die GUI-Controls als "Datenlager" missbrauchen!  Egal welche Kompo du zum Anzeigen verwendest, das darf keine Auswirkungen auf deine Daten haben.
freak4fun hat folgendes geschrieben: | Ich bin also für Vorschläge offen.  |
Alsdann
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type TTermin = class(TObject) private FText: String; FTime: TDateTime; FFest: Boolean; function GetAsStr: String; procedure SetAsStr(const Value: String); public constructor Create(AStunde, AMinute: Integer; AFest: Boolean; AText: String); function getTermin: String; property Text: String read FText write FText; property Time: TDateTime read FTime write FTime; property Fest: Boolean read FFest write FFest;
property AsStr: String read GetAsStr write SetAsStr; end; | Wenn du deine Klasse so umbaust und die Eigenschaft .AsStr entsprechend auslegst, kann eine Instanz dieser Klasse sich selbst als String liefern (.AsStr lesen) oder die Daten aus einem String übernehmen (auf .AsStr schreiben). Dann kannst du z.B. eine TStringList verwenden, um die Zeilen zu sammeln und dann in eine Datei zu schreiben/lesen. Mal so als Ansatz...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Di 09.09.08 23:16
Das klingt aber nach einem gefrickel.  Ist das eine übliche Art daten zu speichern?
Edit: Ich habe hier was gefunden mit Streams, aber da steig ich nicht ganz durch. 
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 09.09.08 23:32
Moin!
freak4fun hat folgendes geschrieben: | Das klingt aber nach einem gefrickel. Ist das eine übliche Art daten zu speichern?  |
Das ist eine Möglichkeit, es gibt sicher noch andere.
freak4fun hat folgendes geschrieben: | Edit: Ich habe hier was gefunden mit Streams, aber da steig ich nicht ganz durch.  |
Das wäre wohl der "übliche Weg", einen StreamWriter/Reader in der Klasse implementieren, aber das könnte noch etwas (zu?) schwer für dich sein.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Di 09.09.08 23:37
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 09.09.08 23:41
Du kannst kein Objekt direkt speichern. Ein Objekt ist nur ein Zeiger auf ein Speicherbereich an dem die Daten und die Methoden des Objektes im Speicher liegen. Du musst die Daten des Objektes auslesen und in einem sinnvollen Format abspeichern.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 09.09.08 23:48
Moin!
freak4fun hat folgendes geschrieben: | Kannst du mir vielleicht trotzdem mal in der Richtung helfen? |
Du hast doch jetzt schon Infos und sogar schon einen Ansatz bekommen (OK, nicht mit Streams, aber trotzdem). Wie wäre es, wenn du damit mal anfängst du arbeiten?  Dann merkst du schon selbst ganz schnell, wo´s lang geht.  Beispielcode gibt´s hier genug, einfach mal die Suche bemühen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Mi 10.09.08 00:57
Danke! Habe es für einen Termin in einem Terminkalender hinbekommen.  Und nun Objectlisten! 
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Do 11.09.08 15:37
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| procedure TForm2.Button1Click(Sender: TObject); var lStream: TFileStream; lLen: LongInt; lStr: String; lInt: Integer; begin lStream := TFileStream.Create('test.dat', fmCreate); try lStr := 'hallo'; lInt := Length(lStr); lStream.Write(lInt, SizeOf(lInt)); lStream.Write(PChar(lStr)^, lInt); finally lStream.Free; end; end;
procedure TForm2.Button2Click(Sender: TObject); var lStream: TFileStream; lLen: LongInt; lStr: String; lInt: Integer; begin lStream := TFileStream.Create('test.dat', fmOpenRead); try lStream.Read(lInt, SizeOf(lInt)); Label1.Caption := IntToStr(lInt); SetLength(lStr, lInt); lStream.Read(PChar(lStr)^, lInt); Label2.Caption := IntToStr(Length(lStr)) + ' - ' + lStr; finally lStream.Free; end; end; |
Wenn ich das so ausführe steht in Label2: 5 - halel! Warum? 
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 11.09.08 16:08
Moin!
freak4fun hat folgendes geschrieben: | Wenn ich das so ausführe steht in Label2: 5 - halel! Warum?  |
Da du keine absoluten Pfade verwendest: wer sagt, dass es sich beides mal um die gleiche Datei handelt?
Ich habe deinen Code gerade getestet: funktioniert einwandfrei.  (allerdings mit abs. Pfad)
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Do 11.09.08 16:21
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Sa 13.09.08 16:51
nee, dass sin nur die standard-C strings.
|
|