Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dynmaische Label finden (https://www.delphipraxis.net/49397-dynmaische-label-finden.html)

TheMiller 10. Jul 2005 21:34


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:
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;
Wie kann ich jetzt zum Bleistift alle Labels von "Buchstabe" löschen, oder auf einzelne zugreifen?

Danke im Voraus

Aenogym 10. Jul 2005 21:40

Re: Dynmaische Label finden
 
hi,

so geht das:

Delphi-Quellcode:
//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;
aenogym

TheMiller 10. Jul 2005 21:47

Re: Dynmaische Label finden
 
Oh,

danke. Werd es mal testen.

TheMiller 10. Jul 2005 21:48

Re: Dynmaische Label finden
 
Naja,

ich habe hier aber nicht nur dynamische Labels, sondern auch 4 statische Labels... stehe ich auf dem Schlauch?

leddl 10. Jul 2005 21:51

Re: Dynmaische Label finden
 
Dann benamse die dynamischen Labels so, daß du sie später erkennst.

jfheins 10. Jul 2005 22:02

Re: Dynmaische Label finden
 
Oder tu sie dir in ein Array of TLabel im private Teil des Forms ;)

Robert_G 10. Jul 2005 22:31

Re: Dynmaische Label finden
 
Zitat:

Zitat von jfheins
Oder tu sie dir in ein Array of TLabel im private Teil des Forms ;)

Entweder das, oder eine Ableitung von TLabel nehmen.
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
        ...

TheMiller 10. Jul 2005 23:00

Re: Dynmaische Label finden
 
So,

habe jetzt diesen Code:

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 = 'Label1' then
      ShowMessage('JA');
    end;
  end;
end;
Label1 findet er. Doch die auch nachweisbar erstellte TLabel Komponente mit dem Namen Dyn1 findet er nicht, wenn ich diesen Code benutze. Warum?!?

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;

sniper_w 10. Jul 2005 23:14

Re: Dynmaische Label finden
 
Vielleicht ist das falsch:
Delphi-Quellcode:
Dyn1:=TLabel.Create(nil)
und sollte so aussehen:
Delphi-Quellcode:
Dyn1:=TLabel.Create(self{form1})

Robert_G 10. Jul 2005 23:14

Re: Dynmaische Label finden
 
Zitat:

Zitat von DJ-SPM
habe jetzt diesen Code:
Delphi-Quellcode:
if form1.Components[i].ClassType = TLabel then

Autsch... :?
form1 ist eine globale Variable! Was hat die denn da zu suchen? :gruebel: Bitte mal hier nach "Prost Mahlzeit! :cheers: " suchen... :roll:
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:
Label1 findet er. Doch die auch nachweisbar erstellte TLabel Komponente mit dem Namen Dyn1 findet er nicht, wenn ich diesen Code benutze. Warum?!?
Warum sollte man überhaupt nach einem Control per Namen suchen? :gruebel:
Aber egal.... Hast du ihm auch wirklich einen Namen gegeben?
Delphi-Quellcode:
Control.Name := 'Dyn1';


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr.
Seite 1 von 3  1 23      

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