Ich meine, du hast Zeilen und Spalten vertauscht. Probier doch mal aus, was passiert, wenn du die Anzahl der Spalten gleich der Anzahl der Zeilen setzt, dann sollte es eigentlich funktionieren.
Schau dir das mal genauer an:
SetLength(buchstabe,Anzahlzeilen,Anzahlspalten);
In erster Dimension hast du "AnzahlZeilen" an Elementen, in zweiter Dimension "AnzahlSpalten". In deiner Schleife machst du folgendes:
Delphi-Quellcode:
for i := 0 to AnzahlSpalten -1 do
for n := 0 to AnzahlZeilen -1 do
begin
//...
buchstabe[i,n].Zeichen := Char(RandomZeichen); // i ist erste Dimension, n zweite !!!!
end;
i iteriert über die erste Dimension. Du gehst bis "AnzahlSpalten" -1, hast aber bloß "AnzahlZeilen" Elemente. Das gleiche gilt für n. Wenn "AnzahlZeilen" <> "AnzahlSpalten" dann kracht es irgendwann unweigerlich...