Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Label-Array: Verwaltung und Nutzung einzelner Labels? (https://www.delphipraxis.net/74692-label-array-verwaltung-und-nutzung-einzelner-labels.html)

Kasch 7. Aug 2006 16:39


Label-Array: Verwaltung und Nutzung einzelner Labels?
 
Hallo,

ich wollte ganz harmlos ein Array aus 20 Labels erstellen und diese halt dann bearbeiten (Hintergrundfarbe, Caption etc).
Nur wie geht das?
ich habe zwar mit
Delphi-Quellcode:
var
datLabels1 : array[1..23] of TLabel;
ein array errichtet, dennoch kann ich keinem Label in der Form den Namen datLabels1[1] geben.
was mache ich falsch?
Vielen Dank

DGL-luke 7. Aug 2006 16:45

Re: Label-Array: Verwaltung und Nutzung einzelner Labels?
 
ähm...

Delphi-Quellcode:
for i := 0 to high(datlabels1) do
  begin
    datlabels1[i] := TLalbel.Create(Form1);
    datlabels[i].Parent := Form1;
    datlabels[i].Left := 20;
    datlabels[i].Top := (i+1) * 20;
  end;
Problem?

Kasch 7. Aug 2006 16:51

Re: Label-Array: Verwaltung und Nutzung einzelner Labels?
 
und schon vorher mit dem Objektinspektor einrichten und schön formatieren/anordnen/ausrichten geht nicht?

DGL-luke 7. Aug 2006 16:55

Re: Label-Array: Verwaltung und Nutzung einzelner Labels?
 
klar...

Delphi-Quellcode:
labels[0] := Label1;
labels[1] := Label2;

//oder intelligent, aber weniger performant
//labels müssen Label1, Label2, Label3 etc. heißen!

for i := 0 to high(labels) do
  labels[i] := FindComponent('Label'+inttostr(i+1)) as TLabel;

//oder noch intelligenter und auch ein bisschen performanter
//dabei werden die controls nur einmal komplett durchgesucht

for i := 0 to ControlCount-1 do
  if copy(Controls[i].Name,1,length('Label')) = 'Label' then
    labels[strtoint(copy(Controls[i].Name,length('Label')+1,5))] := Controls[i] as TLabel;
EDIT: eins hinzugefügt.

Der_Unwissende 7. Aug 2006 16:55

Re: Label-Array: Verwaltung und Nutzung einzelner Labels?
 
Hi,
ich glaube du verwechselst da ein paar Dinge. Ein Name ist nur die Eigenschaft einer Klasse (glaube TControl, kann aber auch was anderes sein). Alle Nachfahren dieser Klasse haben diese Eigenschaft, aber der Name hat nichts mit den Referenzen auf eine Instanz (z.B. ein bestimmtes Label) oder die Lage im Speicher zu tun.
Der Name ist einfach nur ein String. Du kannst ihn verwenden um ein Label eindeutig zu identifieren, Delphi würde da auch eine Adresse oder ein Handle (also ein DWord) reichen. Nur lesen sich 32 Bit Werte nun einmal weniger gut als ein String.
Den Namen kannst du also nicht zuweisen.
Wie man die Label dyn. zur Laufzeit erzeugt hat dir DGL-Luke ja schon gezeigt. Dabei ist natürlich zu beachten, dass es
Delphi-Quellcode:
for i := low(datlabels1) to high(datlabels1) do
heißt und nicht
Delphi-Quellcode:
for i := 0 to high(datlabels1) do
da dein Array 1 indexiert ist.
Wenn du die Label zur Designzeit erzeugt hast und einem Array zuweisen möchtest, sähe der Weg etwas umständlicher aus, du müsstest explizit jeder Stelle im Array das entsprechende Label zu weisen:
Delphi-Quellcode:
datLabels1[1] := label1; // natürlich durch den Namen des entsprechenden Labels zu ersetzen!
datLabels1[2] := label2;
...
Gruß Der Unwissende

[Edit]
Blöde rote Kästen
[/Edit]

DGL-luke 7. Aug 2006 16:59

Re: Label-Array: Verwaltung und Nutzung einzelner Labels?
 
Zitat:

Wenn du die Label zur Designzeit erzeugt hast und einem Array zuweisen möchtest, sähe der Weg etwas umständlicher aus,
Nö. Siehe oben. Die Form registriert netterweise alle Child-Komponenten inklusive Name, das kann man dann auch wieder auslesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 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