Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Panel mit Label dynamisch erzeugen

  Alt 28. Jul 2010, 19:34
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...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (28. Jul 2010 um 19:37 Uhr)
  Mit Zitat antworten Zitat