Entwickler-Ecke
Dateizugriff - Speichern von Komponenten
monty.ms - So 18.11.07 17:42
Titel: Speichern von Komponenten
Hallo
Ich wollte eine Komponente mittels MemoryStream speichern und laden, aber irgendwie funktioniert das nicht ganz:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TTest = class(TComponent) public E1: String; E2: String; E3: String; I1: Integer; constructor Create(Text: String); overload; procedure Irgendwas(Text:String); end; |
Speichern:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); VAR MeinStream : TMemoryStream; MeinObjekt : TTest; begin MeinObjekt := TTest.Create('Bla'); MeinObjekt.E1 := 'Test';
MeinStream := TMemoryStream.Create; MeinStream.Clear; MeinStream.WriteComponent(MeinObjekt); MeinStream.SaveToFile('c:\test.dat'); MeinStream.Free; end; |
Laden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button2Click(Sender: TObject); VAR MeinStream : TMemoryStream; MeinObjekt : TTest; begin MeinObjekt := TTest.Create('Bla');
MeinStream := TMemoryStream.Create; MeinStream.LoadFromFile('c:\test.dat'); MeinStream.ReadComponent(MeinObjekt); MeinStream.Free;
ShowMessage(MeinObjekt.E1); end; |
Das Problem ist, dass wenn ich lade, die Variable E1 nicht den String "Test" enthält sondern leer ist. Weis einer was ich falsch gemacht habe? Warum die Variable nicht mit abgespeichert wird?
Danke schonmal für die Hilfe!
monty
Narses - Mo 19.11.07 22:26
Titel: Re: Speichern von Komponenten
Moin!
monty.ms hat folgendes geschrieben: |
Das Problem ist, dass wenn ich lade, die Variable E1 nicht den String "Test" enthält sondern leer ist. Weis einer was ich falsch gemacht habe? Warum die Variable nicht mit abgespeichert wird? |
Es werden nur
published-Eigenschaften gesichert, deshalb landen deine Eigenschaften gar nicht erst im Stream! :idea: Weiterhin erstellst du Objekt, ohne sie wieder freizugeben :shock: Und obendrein brauchst du den
TMemoryStreamgar nicht, wenn du in eine Datei speichern willst, kannst du auch gleich einen
TFileStreamnehmen: ;)
Delphi-Quelltext
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: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| type TTest = class(TComponent) private FE1: String; published property E1: String read FE1 write FE1; end;
procedure TForm1.Button1Click(Sender: TObject); var MeinStream: TFileStream; MeinObjekt: TTest; begin MeinObjekt := TTest.Create(NIL); try MeinObjekt.E1 := 'Test'; MeinStream := TFileStream.Create('F:\test.dat',fmCreate); try MeinStream.WriteComponent(MeinObjekt); finally MeinStream.Free; end; finally MeinObjekt.Free; end; end;
procedure TForm1.Button2Click(Sender: TObject); var MeinStream: TFileStream; MeinObjekt: TTest; begin MeinObjekt := TTest.Create(NIL); try MeinStream := TFileStream.Create('F:\test.dat',fmOpenRead or fmShareDenyWrite); try MeinStream.ReadComponent(MeinObjekt); finally MeinStream.Free; end; ShowMessage(MeinObjekt.E1); finally MeinObjekt.Free; end; end; |
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!