![]() |
Dynmaische Label finden
Hallo,
erstelle mit folgendem Code dynamische Label, da ich aus einem Wort jeden einzelnen Buchstaben als Label haben möchte:
Delphi-Quellcode:
Wie kann ich jetzt zum Bleistift alle Labels von "Buchstabe" löschen, oder auf einzelne zugreifen?
var
i,j:integer; begin Label4.Visible:=False; Wort:=sl.Strings[random(sl.Count)]; Label4.Caption:=Wort; j:=176; for i:=1 to Label4.GetTextLen do begin Buchstabe:=TLabel.Create(nil); Buchstabe.Parent:=Form1; Buchstabe.Caption:=Copy(wort,i,1); Buchstabe.Left:=j+20; Buchstabe.Top:=176; j:=Buchstabe.Left; end; end; Danke im Voraus |
Re: Dynmaische Label finden
hi,
so geht das:
Delphi-Quellcode:
aenogym
//i als laufvariable deklarieren (integer)
for i := 0 to form1.ComponentCount - 1 do begin if form1.Components[i].ClassType = TLabel then begin //hier kannst du mit "form1.Components[i]" arbieten. //ggf. typecast durchführen end; end; |
Re: Dynmaische Label finden
Oh,
danke. Werd es mal testen. |
Re: Dynmaische Label finden
Naja,
ich habe hier aber nicht nur dynamische Labels, sondern auch 4 statische Labels... stehe ich auf dem Schlauch? |
Re: Dynmaische Label finden
Dann benamse die dynamischen Labels so, daß du sie später erkennst.
|
Re: Dynmaische Label finden
Oder tu sie dir in ein Array of TLabel im private Teil des Forms ;)
|
Re: Dynmaische Label finden
Zitat:
Ein konstanter Array wäre aber sicher schneller, da man nur die elevanten Controls durchlaufen muss. "Einfacher" wäre aber die Ableitung (vor allem da du sie eh dynamisch erzeugst):
Delphi-Quellcode:
TMyLabel = class(TLabel)
end;
Delphi-Quellcode:
for i := 0 to ControlCount - 1 do
if Coltrols[i] is TMyLabel then with TMyLabel(Controls[i]) do ... |
Re: Dynmaische Label finden
So,
habe jetzt diesen Code:
Delphi-Quellcode:
Label1 findet er. Doch die auch nachweisbar erstellte TLabel Komponente mit dem Namen Dyn1 findet er nicht, wenn ich diesen Code benutze. Warum?!?
procedure TForm1.Button31Click(Sender: TObject);
var i:integer; begin for i := 0 to form1.ComponentCount - 1 do begin if form1.Components[i].ClassType = TLabel then begin if Form1.Components[i].Name = 'Label1' then ShowMessage('JA'); end; end; end;
Delphi-Quellcode:
procedure TForm1.Button31Click(Sender: TObject);
var i:integer; begin for i := 0 to form1.ComponentCount - 1 do begin if form1.Components[i].ClassType = TLabel then begin if Form1.Components[i].Name = 'Dyn1' then ShowMessage('JA'); end; end; end; |
Re: Dynmaische Label finden
Vielleicht ist das falsch:
Delphi-Quellcode:
und sollte so aussehen:
Dyn1:=TLabel.Create(nil)
Delphi-Quellcode:
Dyn1:=TLabel.Create(self{form1})
|
Re: Dynmaische Label finden
Zitat:
form1 ist eine globale Variable! Was hat die denn da zu suchen? :gruebel: Bitte mal ![]() Außerdem ist die Prüfung auf eine Klasse der is-Operator. Richtig wäre also:
Delphi-Quellcode:
if Components[i] is TLabel then
Delphi-Quellcode:
Warum sollte man überhaupt nach einem Control per Namen suchen? :gruebel:
Label1 findet er. Doch die auch nachweisbar erstellte TLabel Komponente mit dem Namen Dyn1 findet er nicht, wenn ich diesen Code benutze. Warum?!?
Aber egal.... Hast du ihm auch wirklich einen Namen gegeben?
Delphi-Quellcode:
Control.Name := 'Dyn1';
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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