Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Frage zu For Schleifen
MrBlack - Sa 21.11.09 20:16
Titel: Frage zu For Schleifen
Hallo zusammen,
ich hab gerade erst angeangen mit Delphi zu programmieren und habe daher folgende Frage. Ich habe 60 Shapes und möchte die alle an bestimmte Positionen setzen. Aber anstelle von
Delphi-Quelltext
1: 2: 3: 4:
| shape1.left:=500; shape2.left:=200; shape3.left:=xxx; ... |
wäre es doch gut eine For Schleife verwenden zu können. Ich hatte mir dazu folgendes überlegt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.FormCreate(Sender: TObject); var shapenr,left,top,i:integer; begin left:=201; top:=718;
for shapenr:=1 to 60 do shape[shapenr].left:=left; shape[shapenr].top:=top; left:=left+47; top:=top-53; end; end; |
Das funktioniert so leider nicht... Was mache ich falsch?
Danke für eure Hilfe!
Moderiert von
Gausi: Delphi-Tags hinzugefügt
platzwart - Sa 21.11.09 20:20
So wie du es geschrieben hast, muss dann "shape" vom Typ "array[1..60] of TShape" sein. Ist das so?!?
MrBlack - Sa 21.11.09 20:25
nee... Ich hab keinen Array gemacht. Wie würde ich das denn mit nem Array genau machen? Gibt es denn noch andere Lösungen für das Problem?
Delete - Sa 21.11.09 20:30
Eine andere Lösung wäre eine Objektliste.
MrBlack - Sa 21.11.09 20:38
Sry, ich weiß nicht was ne Objectliste ist. Wie erzeug ich die, wie funktioniert die? Danke
Delete - Sa 21.11.09 20:45
Guck mal in der Delphi Hilfe unter TObjectList nach.
der organist - Sa 21.11.09 21:23
gabs da nich mal was von wegen SearchComponent etc oder so?
platzwart - Sa 21.11.09 21:42
Das hieß FindComponent() ;)
Andreas L. - Sa 21.11.09 21:48
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var i: Integer; begin for i := 0 to ComponentCount -1 do begin if Components[i] is TShape then TShape(Components[i]).Left := 111; end; end; |
Das verschiebt alle Shapes die auf der Form sind.
ffgorcky - So 22.11.09 09:17
Das kann so ja noch nicht funktionieren, da ja Dein Shape-Array so noch gar keine Inhalte hat, wenn Du es nicht vorher damit füllst.
Es ist ja die Frage, ob Du auf dies Objekte nur einmal zugreifen möchtest, oder vielleicht öfter.
Wenn Du das öfter machen möchtest, dann solltest Du die Shapes in OnCreate(..) erst mal in ein Array aufnehmen und danach kannst Du sie dann ja ohne weiteres immer im Array abarbeiten:
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: 30: 31: 32:
| var hoechsterArrayIndex:Integer; shape:Array[0..100] of TShape;
procedure TForm1.FormCreate(Sender: TObject); var left,top,i,momentanerIndex:integer; begin momentanerIndex:=0; for i := 0 to ComponentCount -1 do begin if Components[i] is TShape then begin shape[momentanerIndex]:=TShape(Components[i]); momentanerIndex:=momentanerIndex+1; end; end; hoechsterArrayIndex:=momentanerIndex; left:=201; top:=718; for momentanerIndex:=0 to hoechsterArrayIndex do shape[shapenr].left:=left; shape[shapenr].top:=top; left:=left+47; top:=top-53; end; |
So ich hoffe, dass Du damit was anfangen kannst.
Andreas L. - So 22.11.09 09:36
@ffgorcky: Ist aber keine gute Idee deine Variablen die selben Namen wie Eigenschaften der Form zu geben.
Delphi-Quelltext
1: 2:
| var left,top,i,momentanerIndex:integer; |
MrBlack - So 22.11.09 12:19
Hey, Vielen Dank ffgorcky!!! Jetzt klappts auch bei mir =) Dann kann ich mir die mühselige Tipparbeit sparen! 60 Shapes auf 60 verschiedene Positionen zu bringen kann nämlich etwas dauern! =)
@Andreas: Die Variablennamen hab ich auch noch geändert.
Vielen dank für eure Hilfe! =)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!