Einzelnen Beitrag anzeigen

DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#1

readcomponent(ResFile) "heckt" Subkomponenten

  Alt 6. Mär 2012, 11:11
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

Geändert von DrUArn ( 6. Mär 2012 um 12:29 Uhr)
  Mit Zitat antworten Zitat