Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Mehrere Labels
Arbengie - Mi 31.03.10 14:20
Titel: Mehrere Labels
Hi, und zwar würde ich gerne wissen, ob es möglich ist mehrere Labels gleichzeitig auszuwählen und denen eine Aufgabe zu weisen...
z.B.:
-Habe 3 Labels (Label1,Label2,Label3)
-Mit einem Befehl, dass sich alle 10 Pixel nach rechts verschieben
-Sodass man nich für jedes Label schreiben muss:
Delphi-Quelltext
1: 2: 3:
| Label1.Left := Label1.Left + 10 Label2.Left := Label2.Left + 10 Label3.Left := Label3.Left + 10 |
Moderiert von
Narses: Delphi-Tags hinzugefügt
Gausi - Mi 31.03.10 14:26
Wenn die Labels so durchnummeriert sind, kannst du in einer Schleife FindComponent benutzen.
Niko S. - Mi 31.03.10 15:41
oder in einer Funktion packen wenns immer nur die 3 sind ôo.
MoveLabels(10);
Arbengie - Mi 31.03.10 17:28
Genauer gesagt programmiere ich grad ein kl. Spiel, wo per Timer jede 3 Sekunden ein Label dynamisch erstellt wird. Und jedes Label soll sich dann nach unten bewegen (LabelX.Top+5 z.B.). Aber wenn ich dem Label einen Namen gebe, kommt logischerweise nach 3 Sek. die Fehlermeldung, dass ein Label mit diesem Namen bereits existiert. Wenn ich dem MyLabel nun keinen Namen gebe, dann funktioniert das auch, aber jetzt fehlt mir der Name des Labels, das sich bewegen soll, für den Befehl.
JonS - Mi 31.03.10 17:34
Nimm doch einfach eine Laufvariable, die sich nach jedem erstellen Label um 1 erhöht. Dann kannst du ganz einfach den Namen so erstellen :)
wfg Jon S.
Xentar - Mi 31.03.10 17:44
Wenn du die Labels eh schon dynamisch erzeugst, kann du die Instanzen auch einfach in einem Array of TLabel speichern. Dann brauchst du FindComponent gar nicht, sondern läufst mit einer Schleife über alle Array-Einträge.
Arbengie - Mi 31.03.10 18:00
JonS hat folgendes geschrieben : |
Nimm doch einfach eine Laufvariable, die sich nach jedem erstellen Label um 1 erhöht. Dann kannst du ganz einfach den Namen so erstellen :)
wfg Jon S. |
So war auch meine Idee, aber ich wusste nicht wie das genau geht, habs jetz so gemacht:
Bestimmt extrem umständlich, aber egal^^.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| var LabelName: Record Number: Integer; end;
procedure TForm1.FormCreate(Sender: TObject); begin LabelName.Number := 1; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin MyLabel := TLabel.Create(self); with MyLabel do begin Name := 'Label'+IntToStr(LabelName.Number); AutoSize := False; Left := RandomRange(10,770); Top := 50; Width := 20; Height := 20; Visible := True; Parent := Form1; Show; Color:= clBlack; end; LabelName.Number := LabelName.Number+1; end; |
>M@steR< - Mi 31.03.10 18:13
Gelöscht
Arbengie - Mi 31.03.10 18:33
Hab mal ein bisschen in der Delphi Help gestöbert und bin auf was gestoßen und habs so umgeschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.Button1Click(Sender: TObject); begin for i := 1 to 10 do begin TLabel.Create(Self).Name := NamePrefix + IntToStr(i); with TLabel(FindComponent(NamePrefix + IntToStr(i))) do begin AutoSize := False; Left := RandomRange(10,770); Top := 50; Width := 20; Height := 20; Visible := True; Parent := Form1; Color:= clBlack; end; end; end;
procedure TForm1.Button2Click(Sender: TObject); begin for i := 1 to LabelName.Number do (findcomponent('Label' + inttostr(i)) as TLabel).Top := end; |
Und beim 2. Button sollen sich jeweils alle Labels um 10 nach unten verschieben, aber wie mach ich das?
Ich probier ganze Zeit rum, aber dauernt crashed die .exe...
>M@steR< - Mi 31.03.10 19:08
Gelöscht
Arbengie - Mi 31.03.10 19:45
>M@steR< hat folgendes geschrieben : |
Ömmm das "//..." hinter dem ":=" soll heißen das da noch was fehlt!
EDIT:
Zudem entspricht der untere Quellcode ja nicht mehr dem den du oben gepostet hast.
Du must dich entscheiden, willst du immer nur 10 labels erzeugen oder verschieden viele? |
Verschieden viele...
Xentar - Mi 31.03.10 20:53
Ich glaub, mein Post ist unter gegangen.
>M@steR< - Mi 31.03.10 22:18
Gelöscht
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!