Die Zugriffs Verletzung entsteht da es an der i-ten Position noch keine Zeile gibt.
Und BITTE überdenke dein case n of
0..26: zeichen := char(zeichenr)
Und BITTE nutze ungarische notationen
var i,
iZeilen,
iZeilenLen,
x,
iZeichen : integer;
sZeichen,
sZeile : string;
kann man wesentlich besser lesen.
dann find ich den Fehler auch besse