Hi NoGad
Die Function AddLabel muss teil deines neuen Panels sein, nicht des hinzuzufügenden Labels. An deinem Entwurf stimmen aufgrund deiner Beschreibung einige Sachen nicht.
Nach deiner Beschreibung willst du ein Label schaffen, das sich selber einem Panel hinzufügn kann, createst aber dann in der Addfunktion ein Panel, das sich ein Label createn kann. Und wenn ich dich richtig verstanden habe, ist es eigentlich das, was du willst: ein Panel, dem per Add beliebig viele Labels hinzugefügt werden können.
Delphi-Quellcode:
interface
uses
System.SysUtils, System.Classes,
Vcl.Controls,
Vcl.ExtCtrls,
Vcl.StdCtrls,
Vcl.Graphics;
type
TMy_PanelLabel =
class;
//<= diese Zeile sollttest du vergessen
TMy_PanelLabel =
class(TPanel)
// <= das deklariert dein neues Panel, das sich über die Addfunktion ein neues Label hinzufügen kann
private
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
function AddLabel(AOwner: TComponent): TLabel;
published
{ Published-Deklarationen }
end;
Zur Funtion LabelAdd:
Delphi-Quellcode:
function TMy_PanelLabel.AddLabel(AOwner: TComponent): TLabel;
begin
Result := TLabel.Create(AOwner);
Result.Name := AOwner.Name + '_' + AOwner.ComponentCount.ToString; // (1
Result.Parent := Self;
Result.Align := alLeft;
Result.AutoSize := True;
Result.AlignWithMargins := True;
Result.Alignment := taCenter;
Result.Layout := tlCenter;
Result.Transparent := False;
case (AOwner.ComponentCount mod 2) = 0 of
True:
Result.Color := clLime;
False:
Result.Color := clYellow;
end;
end;
(1 Vergib lieber einen Tag-Wert, von eins an zählend. Solltest du auf die Idee kommen, dass dein Panel neben Labels auch andere Komponenten automatisch createn soll, stimmt Componentcount nicht mehr.
Des weiteren wäre ich mit der Vergabe von Alignwerten sehr vorsichtig. Probier doch mal aus, was passiert, wenn du ein 'Label1' und anschliessend ein 'Label2' alLeft ausrichtest - auf dem Parent liegen dann ein Label2 und
anschliessend ein Label1. Und das ist nur eine kurze Beschreibung der Fehler, die sich durch unüberlegten Einsatz von Align ergeben können.
Gib die Positionswerte Left & Co lieber per Integer(..) an. Die kannst du auch umrechnen, wenn erforderlich.
Gruss
Delbor