| Autor |
Beitrag |
MrBlack
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 21.11.09 20:16
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
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: 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?!?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
MrBlack 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 21.11.09 20:30
Eine andere Lösung wäre eine Objektliste.
|
|
MrBlack 
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 21.11.09 20:38
Sry, ich weiß nicht was ne Objectliste ist. Wie erzeug ich die, wie funktioniert die? Danke
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 21.11.09 20:45
Guck mal in der Delphi Hilfe unter TObjectList nach.
|
|
der organist
      
Beiträge: 467
Erhaltene Danke: 17
WIN 7
NQC, Basic, Delphi 2010
|
Verfasst: Sa 21.11.09 21:23
gabs da nich mal was von wegen SearchComponent etc oder so?
_________________ »Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Sa 21.11.09 21:42
Das hieß FindComponent() 
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: 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
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: 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:
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.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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! =)
|
|