Zitat von
Khabarakh:
man möchte schließlich das freakigstmögliche Design-Pattern einsetzen
Naja, zu den Hintergründen - den Sinn habe ich ja bereits erläutert, und ich sehe ein, dass Mehrfachvererbung eine nette Sache wäre.
Ich habe es jetzt so gelöst, dass ich einfach in der Basisklasse ein Feld 'FControl' und eine entsprechende Property dazu erstellt habe, dem ich dann im Constructor, den ich in den Kindklassen überschreibe, einfach eine Instanz der entsprechenden Klasse zuweise, und erst danach den Constructor der Basisklasse aufrufe.
Dann spreche ich das Ganze halt hinterher nicht nur mit dem Instanzennamen an, sondern mit Instanzenname.Control
Mit Mehrfachvererbung hätte mir zwar besser gefallen, aber so gehts auch.
Delphi-Quellcode:
TBasisklasse = Class
private
FControl: TControl;
FEigenschaft1: Integer;
FEigenschaft2: Integer;
FWind: Integer;
Procedure SetWind(Const Value: Integer);
public
Constructor Create(AOwner: TComponent); virtual;
Property Control: TControl read FControl;
Property Wind: Integer read FWind write SetWind;
End;
TEditklasse = Class(TBasisklasse)
public
Constructor Create(AOwner: TComponent); override;
End;
TLabelklasse = Class(TBasisklasse)
Constructor Create(AOwner: TComponent); override;
End;
TMemoklasse = Class(TBasisklasse)
Constructor Create(AOwner: TComponent); override;
End;
[...]
Constructor TBasisklasse.Create(AOwner: TComponent);
Begin
FEigenschaft1: FControl.Width;
FEigenschaft2: FControl.Height;
End;
Procedure TBasisklasse.SetWind(Const Value: Integer);
Begin
FWind := Value;
FControl.Width := FEigenschaft1 * Value;
FControl.Height := FEigenschaft2 * Value;
End;
Constructor TEditklasse.Create(AOwner: TComponent);
Begin
FControl := TEdit.Create(AOwner);
Inherited;
End;
Constructor TLabelklasse.Create(AOwner: TComponent);
Begin
FControl := TLabel.Create(AOwner);
Inherited;
End;
Constructor TMemoklasse.Create(AOwner: TComponent);
Begin
FControl := TMemo.Create(AOwner);
Inherited;
End;
Edit: freue mich natürlich noch immer über anderweitige Lösungsmöglichkeiten, wenn Ihr welche habt