Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Panel mit Label dynamisch erzeugen (https://www.delphipraxis.net/153305-panel-mit-label-dynamisch-erzeugen.html)

hans ditter 28. Jul 2010 16:05

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

mkinzler 28. Jul 2010 16:08

AW: Panel mit Label dynamisch erzeugen
 
-Erzeugung des Panels
-Erzeugung der Labels mit Panel als Owner + Parent

himitsu 28. Jul 2010 16:11

AW: Panel mit Label dynamisch erzeugen
 
Zitat:

Zitat von mkinzler (Beitrag 1038174)
-Erzeugung des Panels
-Erzeugung der Labels mit Panel als Owner + Parent

oder du schaust dir mal Frames an (also statt des Panel ein Frame)

oder man erstellt sich eine neue Komponente (von TPanel abgeleitet, welches in seinem Constructor die Labels erstellt

oder
oder
oder

mkinzler 28. Jul 2010 16:13

AW: Panel mit Label dynamisch erzeugen
 
-Oder den gleichen und tauscht nur die Inhalte aus
-PageControl mit ausgeblendeten Tabs
...

hans ditter 28. Jul 2010 16:15

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)

DeddyH 28. Jul 2010 16:44

AW: Panel mit Label dynamisch erzeugen
 
Obwohl ich selbst noch nie damit gearbeitet habe denke ich, Frames dürften das Einfachste sein.

stahli 28. Jul 2010 16:55

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ß :-)

hans ditter 28. Jul 2010 17:10

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

stahli 28. Jul 2010 19:34

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:
  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...

Chemiker 28. Jul 2010 20:19

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 08:08 Uhr.
Seite 1 von 6  1 23     Letzte »    

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