Autor Beitrag
MrBlack
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ausblenden 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:

ausblenden 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 user profile iconGausi: Delphi-Tags hinzugefügt
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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



BeitragVerfasst: Sa 21.11.09 20:30 
Eine andere Lösung wäre eine Objektliste.
MrBlack Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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



BeitragVerfasst: Sa 21.11.09 20:45 
Guck mal in der Delphi Hilfe unter TObjectList nach.
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Sa 21.11.09 21:48 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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:

ausblenden volle Höhe 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:
//Form-Variablen:
var
 hoechsterArrayIndex:Integer;
 shape:Array[0..100of TShape;



//Und hier dann Deine OnCreate-Prozedur:
procedure TForm1.FormCreate(Sender: TObject);
var 
    left,top,i,momentanerIndex:integer;
begin
//Also hier erst mal alle in ein Array aufnehmen:
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;
//und hier dann diese alle abarbeiten:
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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: So 22.11.09 09:36 
@ffgorcky: Ist aber keine gute Idee deine Variablen die selben Namen wie Eigenschaften der Form zu geben.

ausblenden Delphi-Quelltext
1:
2:
var 
    left,top,i,momentanerIndex:integer;
MrBlack Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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! =)