Danke für die Hilfe Blup...
Der entscheidende Hinweis war aber die FOR Schleife...Diese Möglichkeit hatte ich komplett ausgeblendet.
Die Erstellung des Grids funktioniert jetzt..Hier mal der Quellcode
BTW
er einzigste Fehler bis jetzt ist die Durchnummerierung des Arrays Feld
Delphi-Quellcode:
procedure TForm2.HexGitterDraw;
Var
Feld : array of TFeld;//Array zum Speichern der Feld Infos
Y,I,Z : Integer; //
Zähler : Integer; //Zählvariable für Schleifen
HöheImage: Integer;//Image1 Höhe
Breiteimage: Integer;//Image1 Breite
AnzahlHexinHöhe: Integer; //Anzahl der HexFelder in einer Spalte
AnzahlHexinBreite: Integer;//Anzahl der HexFelder in einer Reihe
Kantenlänge: Integer;//Kantenlänge einer Seite des Hexagons
Höhe2: Integer; //Halbe Hexagon Höhe
HöheHex : Integer; //Gesamt Hexagon Höhe
StartX : Integer; //X Koordinate der Mitte des oberen linken HexFeldes
StartY : Integer; //Y Koordinate der Mitte des oberen linken HexFeldes
VersetzungUngerade: Integer;//Versetzungsfaktor für ungerade Spalten relativ zum StartPunkt
AnzahlHexGesamt: Integer;//Gesamtanzahl der Hex
Begin
HöheImage:=Image1.Height; //ImageHöhe bestimmen
BreiteImage:=Image1.Width; //ImageBreite bestimmen
Kantenlänge:=StrToInt(Edit3.Text);//Einlesen der Kantenlänge des Hexagons
Höhe2:= Round(SQRT((Kantenlänge*Kantenlänge)-((1/2)*(Kantenlänge*Kantenlänge))));
HöheHex:=Höhe2*2; //Gesamthöhe des Hexfeld in Pixel
AnzahlHexinHöhe:=round(HöheImage/HöheHex);//Anzahl der HexFelder in einer Spalte bestimmen
AnzahlHexinBreite:=round(BreiteImage/(Kantenlänge)/3);//Anzahl der HexFelder in einer Reihe bestimmen
Label6.Caption:=IntToStr(AnzahlHexinHöhe);
Label7.Caption:=IntToStr(AnzahlHexinBreite);
//Mitte des oberen linken HexFeldes Bestimmen
StartX:=Kantenlänge;
StartY:=Höhe2;
AnzahlHexGesamt:=AnzahlHexinHöhe*AnzahlHexinBreite;
VersetzungUngerade:=3*Kantenlänge;
//----------------ungerade Spalten zeichnen---------------
For I:=0 to AnzahlHexinBreite-1 do
Begin
Setlength(Feld,AnzahlHexGesamt);
Zähler:=0; //Zähler für Schleife zum zeichnen 1. Spalte
Z:=-1; //Zähler für Arrayfüllung
Y:=StartY; //Übergabe der Variable zum weiteren verarbeiten
Repeat
Inc(Zähler);
Inc(Z);
HexFeldDraw(StartX,Y,Kantenlänge);
Feld[Z].ID:=Zähler;
Feld[Z].MX:=StartX;
Feld[Z].MY:=Y;
Y:=Y+HöheHex;
Until Zähler=AnzahlHexinHöhe;
StartX:=StartX+VersetzungUngerade;
end;
//----------------Gerade Spalten zeichnen---------------
StartX:=Round(5/2*Kantenlänge);
StartY:=HöheHex;
For I:=0 to AnzahlHexinBreite-1 do
Begin
Zähler:=0; //Zähler für Schleife zum zeichnen Spalte
Y:=StartY; //Übergabe der Variable zum weiteren verarbeiten
Repeat
Inc(Zähler);
Inc(Z);
HexFeldDraw(StartX,Y,Kantenlänge);
Feld[Z].ID:=Zähler;
Feld[Z].MX:=StartX;
Feld[Z].MY:=Y;
Y:=Y+HöheHex;
Until Zähler=AnzahlHexinHöhe-1;
StartX:=StartX+VersetzungUngerade;
end;
//--------------Ausgabe der Arraywerte in Memo1------------
Memo1.Clear;
For Z:=0 to AnzahlHexGesamt do
Memo1.Lines.Add(IntToStr(Feld[Z].ID)+' '+IntToStr(Feld[Z].MX)+' '+IntToStr(Feld[Z].MY));
End;