AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponente: TPanel mit optionalen Labels im Panel
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente: TPanel mit optionalen Labels im Panel

Offene Frage von "NoGAD"
Ein Thema von NoGAD · begonnen am 21. Mai 2022 · letzter Beitrag vom 23. Mai 2022
Antwort Antwort
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#1

Komponente: TPanel mit optionalen Labels im Panel

  Alt 21. Mai 2022, 23:04
Hallo,

um mir meine Arbeit leichter zu machen. würde ich mir gerne ein Panel als Komponente erstellen, welches Labels aufnimmt.

Leider weiß ich nicht so recht, wie ich da anfangen muss.

Im Endeffekt hätte ich gerne MyPanel.LabelAdd; , was zu einem neuen Label im Panel führt.

Kann mir jemand einen Tipp geben, wie man das umsetzt?

LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#2

AW: Komponente: TPanel mit optionalen Labels im Panel

  Alt 21. Mai 2022, 23:48
Meinst du zur Laufzeit?
Erstelle dir einfach einen classhelper.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Komponente: TPanel mit optionalen Labels im Panel

  Alt 21. Mai 2022, 23:49
Hallo Bernd,

ich möchte es gerne als eigene Komponente erstellen.

LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Komponente: TPanel mit optionalen Labels im Panel

  Alt 22. Mai 2022, 00:48
Hier ist mal ein Test, wie ich es mir vorstelle.

Aber der Code ist natürlich kompletter Unsinn - ich weiß nur leider nicht, wie das richtig gemacht wird, die Darstellung für die Komponente ist erst einmal nur ein Test.

Z.B. der Name der Labels - wie können die automatisch einen bekommen?
Lasse ich den Namen weg, gibt es die nicht.

Ich würde den Labels gerne selbst einen Namen geben, vielleicht direkt bei der Erstellung - oder erst danach?
Keine Ahnung, wie das funktioniert.

Delphi-Quellcode:
unit My_PanelLabel;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Graphics;

type
  TMy_PanelLabel = class;

  TMy_PanelLabel = class(TPanel)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    function AddLabel(AOwner: TComponent): TLabel;
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

function TMy_PanelLabel.AddLabel(AOwner: TComponent): TLabel;
begin
  Result := TLabel.Create(AOwner);
  Result.Name := AOwner.Name + '_' + AOwner.ComponentCount.ToString;
  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;

procedure Register;
begin
  RegisterComponents('Test', [TMy_PanelLabel]);
end;

end.
Mathias
Ich vergesse einfach zu viel.

Geändert von NoGAD (22. Mai 2022 um 00:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Komponente: TPanel mit optionalen Labels im Panel

  Alt 22. Mai 2022, 01:48
Hallo nochmal.


Ich habe eben bei der Recherche das TFlowPanel entdeckt. Das ist im Prinzip das, was ich auch machen wollte, Labels hintereinander automatisch anordnen.

Ich würde mich, trotz des "Fundes" dennoch freuen, wenn ich lernen würde, wie man so eine Komponente richtig erstellt.

LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#6

AW: Komponente: TPanel mit optionalen Labels im Panel

  Alt 22. Mai 2022, 16:11
Hallo,

sollte nicht das Panel auf dem das Label platziert wird in deinem Fall der Owner des Labels sein?
Dann wäre dieser AOwner Parameter überflüssig...

Grüße
TurboMagic
  Mit Zitat antworten Zitat
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, 11: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
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Komponente: TPanel mit optionalen Labels im Panel

  Alt 23. Mai 2022, 13:30
Hallo Roger,

danke für Deine Tipps.

Die Erstellung von solch einer Komponente hatte ich mir von einigen Torry-Komponenten abgeguckt. Ich bleibe dran

LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz