![]() |
Speichern von Komponenten
Hallo
Ich wollte eine Komponente mittels MemoryStream speichern und laden, aber irgendwie funktioniert das nicht ganz:
Delphi-Quellcode:
Speichern:
type
TTest = class(TComponent) public E1: String; E2: String; E3: String; I1: Integer; constructor Create(Text: String); overload; procedure Irgendwas(Text:String); end;
Delphi-Quellcode:
Laden:
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;
Delphi-Quellcode:
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?
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; Danke schonmal für die Hilfe! monty |
Re: Speichern von Komponenten
Die Elemente einer Klasse, die speicherbar sein sollen, müssen so weit ich weiß als published deklariert werden, da nur so die nötigen Laufzeit-Typinformationen erzeugt werden.
Gruß, teebee |
Re: Speichern von Komponenten
Das hatte ich auch schonmal versucht, aber wenn ich die auf published setze bekomm ich immer:
[Error] Unit1.pas(12): Published field 'E1' not a class nor interface type Muss man die irgendwie anders einbinden, oder geht das einfach nicht?
Delphi-Quellcode:
Eigentlich sollte die Klasse nicht von TComponent abgeleitet sein, aber da .ReadComponent ja ein TComponent haben will wusste ich nicht, wie ich es anders hätte machen können.
type
TTest = class(TComponent) published E1: String; E2: String; [...] |
Re: Speichern von Komponenten
Delphi-Quellcode:
type
TTest = class(TComponent) private FE1: string; FE2: string; published E1: String read FE1 write FE1; E2: String read FE2 write FE2; [...] |
Re: Speichern von Komponenten
Ah ok, hätt ich auch drauf kommen können, vielen dank!
PS:
Delphi-Quellcode:
published
property E1: String read FE1 write FE1; property E2: String read FE2 write FE2; |
Re: Speichern von Komponenten
:oops: jepp, übersehen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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