![]() |
Panel mit Label dynamisch erzeugen
Hallo liebe DP,
ich bin's nochmal, diesmal mit 'ner anderen Frage... Ich schreibe gerade an einem Kontoprogramm, wo man seine Ausgaben und Einnahmen eintrage kann, seinen Kontostand etc. sieht. Ich möchte nun in der unteren Hälfte der Form ein Bereich machen, in dem Panels angezeigt werden, auf denen wiederum versch. Labels angezeigt werden. Allerdings müssen die Panels ja während der Laufzeit erzeugt werden. Wie ich EIN Panel dynamisch erzeuge, ist mir klar, aber wie ich ein Panel, auf dem noch mehrere Labels sind, während der Laufzeit erzeuge, weiß ich nicht. Ach ja, dass ist vlt noch wichtig: Die Panels sollen logischerweise alle gleich aussehen, also soll immer das gleiche Panel mit anderem Namen eingefügt werden. LG, hans ditter |
AW: Panel mit Label dynamisch erzeugen
-Erzeugung des Panels
-Erzeugung der Labels mit Panel als Owner + Parent |
AW: Panel mit Label dynamisch erzeugen
Zitat:
oder man erstellt sich eine neue Komponente (von TPanel abgeleitet, welches in seinem Constructor die Labels erstellt oder oder oder |
AW: Panel mit Label dynamisch erzeugen
-Oder den gleichen und tauscht nur die Inhalte aus
-PageControl mit ausgeblendeten Tabs ... |
AW: Panel mit Label dynamisch erzeugen
wozu würdet ihr mir denn raten? Ich bin noch relativ neu bei Delphi.
(persöhnlich würde ich ja gerne mal ausprobieren, eine neue Komponente zu erstellen... aber das stell ich mir schwierig vor) |
AW: Panel mit Label dynamisch erzeugen
Obwohl ich selbst noch nie damit gearbeitet habe denke ich, Frames dürften das Einfachste sein.
|
AW: Panel mit Label dynamisch erzeugen
Hallo Hans,
soooo schwierig ist es eigentlich nicht, eine Komponente zu erstellen. Ich habe selbst als erstes ein rotes Panel erstellt und war ganz stolz :-) Ich glaube nur, mit dem Turbo Delphi kannst Du keine eigenen Komponenten in die Palette aufnehmen. Du könntest aber zur Laufzeit problemlos DEINE Komponente erzeugen, die dann gleich Labels o.ä. beinhaltet. Mein Tipp: Versuche erst mal ein farbiges Panel (ein Tutorial wird sich finden), dann hast Du schon mal das Prinzip fertig. Dann die Farbe wieder weg und statt dessen ein paar Labels drauf... Wirst sehen, das macht Spaß :-) |
AW: Panel mit Label dynamisch erzeugen
@ stahli Hm, ich will ja keinem zu nahe treten und korrigiere mich, falls ich falsch liege, aber kann man ein Panel nicht mit den Standardfarben über die Caption Color färben?
Auf jeden Fall erstmal ein großen Dank an alle, werd mal die versch. Ideen durchprobieren. Liebe Grüße, hans ditter |
AW: Panel mit Label dynamisch erzeugen
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:
Und schon hast Du eine eigene Komponente mit "neuen" Eigenschaften. Zumindest wird das Prinzip schon mal erkennbar.
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; 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:
Der neuen Komponente kann man dann natürlich auch noch wunderbar Eigenschaften und Methoden zuweisen.
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; 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... |
AW: Panel mit Label dynamisch erzeugen
Hallo hans ditter,
was man auch benutzen kann ist ein Komponenten-Template. Damit es relativ einfach eine neue Komponente zu erschaffen ohne viel Quelltext. Jedenfalls siehe ich das bei Standard-Komponenten die nicht allzu viele Sondereigenschaften haben einer neuen abgeleiteten Komponente vor. Allerdings ist mir nicht bekannt ob das bei den Turbos auch geht, bei dem BDS 2006 ist es dabei. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz