Hi, comm.,
habe ein Problem beim Schreiben/Lesen neuer Komponenten
Delphi-Quellcode:
TTestpanel = class(Tpanel)
private
FcheckA: TCheckBox;
Fted: TEdit;
{ private declarations }
protected
{ protected declarations }
public
{ public declarations }
published
{ published declarations }
property checkA: TCheckBox read FcheckA write Fchecka;
property ted: TEdit read Fted write Fted;
constructor create(AOWNER:tcomponent);override;
end;
constructor TTestpanel.create(AOWNER: tcomponent);
begin
inherited;
FcheckA:=tcheckbox.Create(self);
FcheckA.Caption:='A';
// FcheckA.name:='checkA';
InsertControl(FcheckA);
fchecka.SetSubComponent(true);
fted:=TEdit.Create(Self);
Fted.parent:=self;
// fted.name:='ted';
Fted.Top:=25;
Fted.SetSubComponent(true);
AutoSize:=true;
end;
//....
RegisterClasses([TTestpanel]);
im Formular z.B. mit Buttons:
schreiben:
Delphi-Quellcode:
writeComponentResFile('d:\testpanel.tmp',testpanel1);
//oder auch:fstream.WriteComponent(testpanel1); (fstream:tfilestream)
FreeAndNil(testpanel1);
lesen:
Delphi-Quellcode:
testpanel1:=ttestpanel.create(self);
ReadComponentResFile('d:\testpanel.tmp',testpanel1);
//oder auch:fstream.readComponent(testpanel1);
//oder ohne testpanel1:=ttestpanel.create(self): testpanel1:=
// ReadComponentResFile('d:\testpanel.tmp',NIL);
//bzw. tespanel1:= fstream.readComponent(NIL);
InsertControl(Testpanel1);
Die Probleme:
1. gebe ich den Subkomponenten in ttestpanel.create einen namen,
kommt beim Lesen die Fehlermeldung: "Komponente mit der Bezeichnung 'Name' existiert bereits!"
2. bei namenlosen Subkomponenten erhöht sich die Anzahl der im Panel vorhanden Subkomponenten um 1 - d.h. nach dem ersten schreiben/lesen gibt es zwei tedit's und 2 tcheckboxes usw..
Das liegt daran, daß beim Lesen ttestpanel.create aufgerufen wird - damit auch die beiden Subkompontenten erzeugt werden und dann noch einmal eingelesen werden - haben Sie Namen, geht's schief, haben sie keinen Namen, 'vermehren' sie sich!
Wo liegt der Fehler - eigentlich will ich meine neue Komponente nur speichern und wieder einlesen?!
Die verschiedenen Varianten des Einlesens haben das gleiche, unerwünschte Ergebnis.
Bin gespannt!
MfG Uwe