Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Panels in for i schleife "erhöhen"?


tartare - Sa 25.03.06 14:27
Titel: Panels in for i schleife "erhöhen"?
Hallo,

Ich mache gerade ein kartenspiel mit delphi 6. Dort werden zufällig zahlen auf karten übertragen, die dem spieler gezeigt werden sollen. Als karten benutze ich Tpanels. Ich will aber nicht jeden einzelnen panel zuweisen: Panel1.caption:=zahl[i], panel2.caption:=zahl[i]... sondern das ganze ungefähr so machen: for i:= 1 to 20 do
panel[i]:=zahl[i]. Würd mich über jeden tip freuen...
Mfg Tartare.


Marc. - Sa 25.03.06 14:36

das ganze könntest du mit findcomponent machen.


Delphi-Quelltext
1:
2:
3:
4:
5:
var i: byte;
begin
 for i := 1 to 20 do
  TPanel(Form1.FindComponent('Panel' + IntToStr(i))).Caption := zahl[i]; 
end;


Ferrari - Sa 25.03.06 14:40

Du kannst die Panels während der Laufzeit als Array erzeugen. Dann würde bei den Variablen stehen:


Delphi-Quelltext
1:
Panel: Array[1..20of TPanel;                    


dann kannst du die Panels in dem OnCreate-Ereignis erzeugen. das würde dann so aussehen:


Delphi-Quelltext
1:
2:
3:
4:
5:
for i := 1 to 20 do
begin
 Panel[i] := TPanel.Create;
 Panel[i].Parent := Self; 
end;


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


tartare - Sa 25.03.06 14:52

Danke für die Hilfe, funzt wunderbar...


fidionael - Sa 25.03.06 14:53

Folgende Korrekturen:

Die erste Lösung funktioniert, aber man muss natürlich wenn es eine Zahl ist diese zunächst in einen String umwandeln, bevor man es als Caption angeben kann, also

Delphi-Quelltext
1:
TPanel(Form1.FindComponent('Panel' + IntToStr(i))).Caption :=IntToStr(zahl[i]);                    


Bei der zweiten Lösung wird der constructor nicht richtig aufgerufen, es müsste eigentlich lauten:

Delphi-Quelltext
1:
Panel[i] := TPanel.Create(Self);                    


Ich weiß, dass es nur winzige Fehler sind und vermutlich jeder selber drauf kommt beim Kompilieren, doch wegen der Vollständigkeit... *gg*