Hatte jetzt einfach mal deinen Code aus Post #1 in ein Projekt kopiert und bei mir (in D7) trat kein Fehler auf.
(auch wenn das Problem mit der Objektreferenz drin ist)
auch mit berichtigtem Owner und den den Korrekturen bezüglich der Referenzen läuft alles einwandfrei
Delphi-Quellcode:
type
TObjekt2 = class(TEdit)
public
constructor Create(AOwner: TComponent); override;
end;
TObjekt1 = class(TStringGrid)
public
Objekt2 : TObjekt2;
constructor Create(AOwner: TComponent; Anders : byte); reintroduce;
destructor destroy; override;
end;
type
TObjektMit2Objekten = class
public
Objekt1a, Objekt1b : TObjekt1; //////////////////////
constructor Create(ZuBenutzendesFormular : TWinControl);
destructor Destroy; override;
end;
constructor TObjekt1.Create(AOwner: TComponent; Anders : byte);
begin
inherited Create(AOwner);
Parent := AOwner as TWinControl;
case Anders of
1:
begin
Left := 450;
Top := 150;
DefaultColWidth := 30;
DefaultRowHeight := 30;
FixedCols := 0;
FixedRows := 0;
BorderStyle := bsSingle;
ColCount := 8;
RowCount := 1;
Width := 253;
Height := 32;
end;
2:
begin
Objekt2 := TObjekt2.Create(Self); //////////////////////
Objekt2.Top := 200;
Left := 450;
Top := 200;
DefaultColWidth := 30;
DefaultRowHeight := 30;
FixedCols := 0;
FixedRows := 0;
BorderStyle := bsSingle;
ColCount := 8;
RowCount := 1;
Width := 253;
Height := 32;
end;
end;
end;
destructor TObjekt1.destroy;
begin
Objekt2.Free;
inherited destroy;
end;
constructor TObjekt2.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent := TWinControl(AOwner);
Left := 400;
Width := 50;
AutoSize := false;
Height := 32;
Font.Size := 16;
Text := 'Objekt2';
end;
constructor TObjektMit2Objekten.Create(ZuBenutzendesFormular : TWinControl);
begin
inherited Create;
Objekt1a := TObjekt1.Create(ZuBenutzendesFormular, 1); //////////////////////
Objekt1b := TObjekt1.Create(ZuBenutzendesFormular, 2); //////////////////////
end;
destructor TObjektMit2Objekten.destroy;
begin
Objekt1a.free; //////////////////////
Objekt1b.free; //////////////////////
Inherited destroy;
end;
procedure TForm1.Button1Click(Sender: TObject);
var o: TObjektMit2Objekten;
begin
o := TObjektMit2Objekten.Create(Self);
o.Free;
end;
Zitat:
Edit #2:
Welches Create() inheritest' du da eigentlich? hat TObject überhaupt eins?
das ist egal ... wenn kein Vorgänger existert, dann irgnoriert es Delphi
es sit auch besser dieses immer mit reinzumachen (es sei denn man weiß ganze genau, daß es wirklich unnötig ist),
aber lieber einmal zuviel, als es wo anders mal zu vergessen,
also es ist wirklich einfacher es immer zu reinzuschreiben ... sicher ist sicher