Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auf mehrere Labels zugreifen (https://www.delphipraxis.net/8224-auf-mehrere-labels-zugreifen.html)

F.W. 31. Aug 2003 12:52


Auf mehrere Labels zugreifen
 
1. Sorry, aber ein anderer Titel ist mir nicht eingefallen.
2.Mein Problem:
Es handelt sich um Galgenraten.
Es wird aus verschiedenen Strings einer ausgesucht(über Random). Soviele Buchstaben, wie das Wort hat, soviele Labels werden erstellt und bekommen als Caption einen Unterstrich. Der Hint wird mit dem an der Stelle stehenden Buchstaben versehen.(Ich mache das ganze über eine Schleifenvariable I: Integer)
Der Name der Labels heißt dann 'L'+IntToStr(I)
Wenn nun eine Buchstabentaste gedrückt wird, sollen alle Labels mit dem Hint, der dem Buchstaben entspricht ihre Captions mit dem Hint eintauschen(wenn der Buchstabe im Wort ist, werden alle gleichen Buchstaben "aufgedeckt").
Ich habe das so programmiert:
Delphi-Quellcode:
TLabel('L'+IntToStr(I)).Caption := TLabel('L'+IntToStr(I)).Hint;
Aber da kommt immer eine Fehlermeldung:
"Format %p ungültig oder nicht kompatibel mit Argument"

Wie kann ich das anders machen?

Danke schon mal!

Christian Seehase 31. Aug 2003 12:57

Re: Auf mehrere Labels zugreifen
 
Moin F.W.,

schau Dir dazu am Besten mal FindComponent an.
Zum einen in der Hilfe, zum anderen auch hier (Hier im Forum suchenFindcomponent))

Christian S. 31. Aug 2003 12:57

Re: Auf mehrere Labels zugreifen
 
Hallo!

Was Du brauchst ist die Funktion FindComponent. Die wird dann so benutzt:

Delphi-Quellcode:
VAR myObject : TObject;
begin
  myObject:=FindComponent('L'+IntToStr(i));
  if myObject is TLabel then
  TLabel(myObject).Caption := TLabel(myObject).Hint;
end;
Das myObject brauchst Du nicht unbedingt, aber ich wollte nicht dreimal FindComponent aufrufen.

MfG
Peter

//edit: :cry: zu langsam!

Luckie 31. Aug 2003 12:59

Re: Auf mehrere Labels zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier findet du ein Demo zu FindComponent:
http://www.luckie-online.de/files/demos/

Und als Dreingabe der Anhang. (Ohne Hint und schon alt.)

F.W. 31. Aug 2003 18:40

Re: Auf mehrere Labels zugreifen
 
Ich habs ausprobiert und es geht, aber nicht bei meinen Labels, die ich im laufenden Betrieb erzeugt habe, da passiert nichts.
Delphi-Quellcode:
var
  PosI, I: Integer;
  L: TLabel;
begin
  PosI := 20;
 for I := 1 to Length(RateS) do begin
  L := TLabel.Create(Panel1);
  L.Name := 'L'+IntToStr(I);
  L.Caption := '_';
  L.Hint := UpCase(Char(RateS[I]));
  L.Parent := Panel1;
  L.ShowHint := True;
  L.Top := 20;
  L.Left := PosI;
  L.Font := Label3.Font;
  PosI := PosI+30;
 end;
end;
So erzeuge ich die Labels, beim Klick auf START. Kann es sein, dass da was mit dem Namen nicht stimmt, z.B. das der nicht in die "Liste" der Objekte, die FindComponent durchsucht reingenommen wird?

Christian S. 31. Aug 2003 19:01

Re: Auf mehrere Labels zugreifen
 
Hallo!

Da die Labels zum Panel1 gehören, musst Du auch das zum Panel1 gehörige FindComponent aufrufen, also Panel1.FindComponent.

MfG
Peter

F.W. 1. Sep 2003 17:39

Re: Auf mehrere Labels zugreifen
 
Danke! Hat super geklappt!

Eine neue Frage hätte ich noch: Kann man bei Random() auch einen Bereich VON bis eingeben, also das nicht mit 0 sondern mit 123 angefangen wird?

Danke!

Matze 1. Sep 2003 17:45

Re: Auf mehrere Labels zugreifen
 
Klar geht das:

Delphi-Quellcode:
random(100)+50;
gibt z.B. die Zahlen von 50-150 aus.

oder:

Delphi-Quellcode:
random(300)+123;
gibt die Zahlen von 123-423 aus.

F.W. 2. Sep 2003 19:00

Re: Auf mehrere Labels zugreifen
 
Garnicht mal so leicht, danke!!

Danke!
Danke!


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