Entwickler-Ecke

Sonstiges (Delphi) - zweidimensionales dynamisches Array von Shapes


Sam09 - Mo 23.03.09 16:21
Titel: zweidimensionales dynamisches Array von Shapes
Hallo,

Ich habe ein kleines Problem:
Ich habe ein zweidimensionales Array von Shapes dynamisch erstellt. Bei der Ausgabe im Panel hätte ich es gerne Reihe für Reihe ausgegeben, aber egal wie ich es anstelle ich bekomme es nicht hin.. ich hoffe Ihr könnt mir helfen..
Danke schonmal!

Hier der Quellcode:


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:
var
  Form1: TForm1;
  Myshapes: array of array of Tshape;

 Procedure zeichnen;
 var
    x,y, links:integer;

  begin
  setlength(Myshapes,4,4);
 links:=-1;
  for x:= 0 to high(Myshapes) do
    begin
  for y:=0 to high(Myshapes[x]) do
  begin
   Myshapes[x][y]:=TShape.Create(Form1.Panel1);
   myshapes[x][y].Shape:=stCircle;
   myshapes[x][y].Parent:=Form1.Panel1;
   myshapes[x][y].Top:=0 ;
   myshapes[x][y].left:=links*50;
   myshapes[x][y].width:=150;
   myshapes[x][y].height:=50;
   myshapes[x][y].Brush.Color:=clwhite;
   inc(links);
   end;
    end;
     end;


Xentar - Mo 23.03.09 16:41

Was passiert denn (nicht)? Fehlermeldung?


Sam09 - Mo 23.03.09 16:46

Also, es gibt keine Fehlermeldung! Beim create werden alle shapes in einer Reihe auf dem Panel angezeigt. Ich möchte aber mehrere Reihen haben!!
Bsp. ich habe die größe mit setlenght(Myshapes,4,4) gesetzt, dann möchte ich 4 Reihen á 4 Shapes haben. Ich bekome das aber nicht hin, egal wie ich es versuche!!
Ich hoffe ich konnte mein Problem plausibel erklären!


Keldorn - Mo 23.03.09 16:49

Hallo

Zitat:

myshapes[x][y].Top:=0 ;
myshapes[x][y].left:=links*50;
myshapes[x][y].width:=150;
myshapes[x][y].height:=50;


na, du tust doch alle übereinander erstellen, an der Erstellposition wird doch gar nix geändert


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  Breite := 150;
  Hoehe  := 50;
  ...
   //+10 = Abstand zu einander
   myshapes[x][y].Top:=x*(Breite+10);
   myshapes[x][y].left:=y*(Hoehe+10);
   myshapes[x][y].width:= breite;
   myshapes[x][y].height:=hoehe;


wenn du mit deinem Links arbeiten willst, mußt du die Schleifen drehen (y zuerst und dann x durchlaufen) und links in der y-Schleife am anfang wieder auf 0 setzen. Bringt dir für das Setzen der Top-Eogenschaft aber auch 0 Punkte

Gruß Frank


elundril - Mo 23.03.09 16:49

naja, eh klar, dein Top is ja statisch! da kanns ja nur in einer reihe angezeigt werden. du müsstest dein top mit dem x bzw dem y deiner schleifen koppeln.

lg elundril

//edit: lol gleichzeitig :D


Sam09 - Mo 23.03.09 16:54

Perfekt!!
Läuft genau so wie ich es wollte!!
Vielen Dank für die schnelle Hilfe!!!


Xentar - Mo 23.03.09 17:01

Und gewöhn dir bitte diese vielen Ausrufezeichen ab. Oder schreist im richtigen Leben auch jeden an, wenn du mit ihm sprichst?


Sam09 - Mo 23.03.09 17:08

Alles klar, danke.


Sam09 - Mi 25.03.09 20:14

Habe noch eine Frage dazu:
Jetzt habe ich die shapes in richtiger Reihenfolge, möchte diese per dynamisch erstellter Buttons (array of TButton) färben.
Das bedeutet ich klicke den Button über den shapes an und es soll das letzte in der Spalte gefärbt werden.

Meine Procedure klappt zwar, aber es werden immer mehrere Shapes gefärbt, es soll aber immer nur das letzte Shape gefärbt werden.
Ich hoffe Ihr könnt mir nochmal helfen.

/Edit erledigt