Hallo,
nein, das macht doch nichts
Es ist schon ein Unterschied, ob man eine Eigenschaft eines Objekts ändert oder ob man ein eigenes Objekt ableitet.
Du würdest dann eben zur Laufzeit: NewPanel := TMyRedPanel.Create(Self)
schreiben.
Und das wäre eben ein NEUES und EIGENES Objekt, abgeleitet eben von TPanel.
Den Constructor des Objekts würde man dann in der Form überschreiben:
Delphi-Quellcode:
TMyRedPanel = class(TPanel)
private
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
end;
...
constructor TMyRedPanel.Create(AOwner: TComponent);
begin
inherited;
Color := clRed;
end;
destructor TMyRedPanel.Destroy;
begin
inherited;
end;
Und schon hast Du eine eigene Komponente mit "neuen" Eigenschaften. Zumindest wird das Prinzip schon mal erkennbar.
Normalerweise kann man nun die neue Komponente registrieren und in die Komponentenpalette aufnehmen - das dürfte aber mit Deiner Delphi-Version nicht gehen, denke ich.
Im nächsten Schritt kannst Du dann die Farbe (war ja nur zum testen) wieder entfernen und Deine Labels einbinden:
Delphi-Quellcode:
TMyPanel = class(TPanel)
private
protected
public
Label1: TLabel;
Label2: TLabel;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
end;
...
constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited;
Label1 := TLabel.Create(Self);
Label1.Parent := Self;
Label1.Align := alTop;
Label2 := TLabel.Create(Self);
Label2.Parent := Self;
Label2.Align := alBottom;
end;
destructor TMyPanel.Destroy;
begin
inherited;
end;
Der neuen Komponente kann man dann natürlich auch noch wunderbar Eigenschaften und Methoden zuweisen.
So könnte man z.B. den Zugriff zu den Labels von außen verhindern und dafür bestimmte Eigenschaften zur Verfügung stellen, z.B. CaptionTop und CaptionBottom.
Dann kann der Benutzer direkt diese Eigenschaften (ggf. sogar im Objektinspektor) setzen.
Also es lohnt sich durchaus, sich das mal etwas anzuschauen...