Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Komponente: TPanel mit optionalen Labels im Panel

  Alt 23. Mai 2022, 10:07
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat