AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speichern von Komponenten

Ein Thema von monty.ms · begonnen am 18. Nov 2007 · letzter Beitrag vom 18. Nov 2007
Antwort Antwort
monty.ms

Registriert seit: 19. Nov 2004
76 Beiträge
 
#1

Speichern von Komponenten

  Alt 18. Nov 2007, 18:34
Hallo

Ich wollte eine Komponente mittels MemoryStream speichern und laden, aber irgendwie funktioniert das nicht ganz:

Delphi-Quellcode:
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-Quellcode:
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-Quellcode:
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
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#2

Re: Speichern von Komponenten

  Alt 18. Nov 2007, 18:50
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
  Mit Zitat antworten Zitat
monty.ms

Registriert seit: 19. Nov 2004
76 Beiträge
 
#3

Re: Speichern von Komponenten

  Alt 18. Nov 2007, 19:00
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:
type
  TTest = class(TComponent)
  published
    E1: String;
    E2: String;
    [...]
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Speichern von Komponenten

  Alt 18. Nov 2007, 19:13
Delphi-Quellcode:
type
  TTest = class(TComponent)
  private
    FE1: string;
    FE2: string;
  published
    E1: String read FE1 write FE1;
    E2: String read FE2 write FE2;
    [...]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
monty.ms

Registriert seit: 19. Nov 2004
76 Beiträge
 
#5

Re: Speichern von Komponenten

  Alt 18. Nov 2007, 19:27
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Speichern von Komponenten

  Alt 18. Nov 2007, 19:33
jepp, übersehen
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz