Lazarus (FreePascal), Mehrdimensionales Array/Bild

Hallo liebe WWW-Community,
ich bin mittlerweile etwas eingerostet mit meinen Delphikenntnissen, vor allem was Bilder und Mehrdimensionale Arrays angeht. Ich hatte Langeweile und wollte mich einmal an einem Schachbrett versuchen. Ok, ich hab mir meine Arbeit langsam eingeteilt, es hat nämlich alles Zeit. Ziel der ersten Übung war es jetzt ersteinmal zwei mal 64 Felder (Es sollen zwei Bretter nebeneinander werden) mit einem Bild zu Platzieren. Hierbei dachte ich an ein Mehrdimensionales Array vom Typ eines Records, der ein paar für mich später relevante Informationen und das entsprechende Bild des Feldes enthält (Hier ist vorerst nur ein Testbild eingetragen). Mein Problem ist nun, dass beim unten angegebenen Quelltext zwar ein Bild erscheint (was zugegebenermaßen schonmal ein Quantensprung ist und mich eine Stunde gekostet hat, ich stand ziemlich auf dem Schlauch), aber eben auch nur ein Bild und zwar das entsprechend letzte, lasse ich die j-Laufvariable nur bis j=6 Laufen, so wird es weiter oben positioniert, für 5 noch weiter oben, etc. Aber es wird lediglich das letzte Bild angezeigt. Ich vermute das Problem bei der Zuweisung des Bildes oder einiger Eigenschaften oder in der Deklarierung und Verwendung des dreidimensionalen Arrays. Wenn mir jemand dabei helfen könnte wäre ich euch sehr verbunden

Mit freundlichen Grüßen
Kevin Woost

 unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
 Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Menus,
 ExtCtrls;

type

 { TForm1 }

 Feld = record
 pic: Tjpegimage;
 bild: TImage;
 x: byte;
 y: byte;
 highlighted: Boolean;
 typ: byte;
 end;
 TForm1 = class(TForm)
 Image1: TImage;
 MainMenu1: TMainMenu;
 procedure FormCreate(Sender: TObject);
 procedure startgame;
 procedure draw;
 private
 { private declarations }
 public



 end; 

var
 Form1: TForm1;
 Brett: Array[0..1] of Array[0..7] of array[0..7] of Feld;

implementation

{ TForm1 }


procedure Tform1.draw;
var
 h,i,j:integer;
begin
 for h:=0 to 1 do
 for i:=0 to 7 do
 for j:=0 to 7 do
 begin
 //hier feld mit entsprechendem typ an entsprechende position "zeichnen"
 //brett[1,1,1].picture.widht.x:=50;
 end;
end;

procedure TForm1.startgame;
var
 h,i,j:integer;
begin
 for h:=0 to 1 do
 for i:=0 to 7 do
 for j:=0 to 7 do
 begin
 Brett[h][i][j].x:=i;
 Brett[h][i][j].y:=j;
 Brett[h][i][j].highlighted:=false;
 Brett[h][i][j].typ:=0;
 Brett[h][i][j].bild:=Timage.create(brett[h,i,j].bild);
 Brett[h][i][j].bild:=image1;
 Brett[h][i][j].bild.Picture.loadfromfile('/Users/derder/Desktop/schwarz.jpg');
 Brett[h][i][j].bild.height:=50;
 Brett[h][i][j].bild.width:=50;
 Brett[h][i][j].bild.left:=10+h\*450+i\*50;
 Brett[h][i][j].bild.Top:=10+j\*50;
 Brett[h][i][j].bild.visible:=true;
 //brett[h,i,j].bild.canvas.FillRect(0,51,0,51);
 end;


 draw;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 startgame;
end;


initialization
 {$I unit1.lrs}

end.

So, bevor mich Leute aufgrund meiner Array-Deklarierung komisch angucken, ich hab da vor dem Post ein bisschen herumgespielt und es nach Einblick in einen alten Quellcode von mir wieder in diese vorm umgeschrieben:

Brett: Array[0…1,0…7,0…7] of Feld;

Brett[h,i,j].x:=i;

Hallo,

schau Dir mal diese 2 Zeilen in Deinem Code an:

Brett[h][i][j].bild:=Timage.create(brett[h,i,j].bild);
Brett[h][i][j].bild:=image1;

Erst weist Du deinem Array-Member ein neu erzeugtes Bild zu (übrigens würde ich TImage.create(self) nehmen), um es anschließend sofort mit einer neuen Zuweisung (TImage der Form) zu „überschreiben“. Am Ende bekommen alle Brett[h][i][j].bild nur das TImage der Form zugewiesen. Über das LoadFromFile werden dann in das TImage der Form nacheinander alle Bilddateien geladen, so dass am Ende nur die letzte sichtbar ist.
Schlimmer noch: die erzeugten TImages sind jetzt irgendwo in Deinem Speicher-Nirwana verschwunden => ein typisches Speicherleck ist entstanden.

btw: Du solltest überlegen, ob Du nicht besser statt eines TImage ein TBitmap verwendest. Hängt aber stark von Deinem weiteren Code ab, was besser ist.

Gruß, Niels