for i := 1 to length(s) do
memo1.lines.add(copy(s,1i,8i));
Jesli nic nie pomieszalem to dobrze :) i to integer a s to ten twoj string;
Oj pomieszałeś i to dużo :) dla i=1 jest ok, ale dla następnych... np. dla 2 kopiujesz znaki od 2-go do 16-go, dla 3 - od 3-ego do 24-ego i tak dla kazdej liczby z przedziału <1,i> - a więc w warunkach problemu powstaną 43 linie, z których najdłuższa bezie miała aż 43 znaki - bo pustych po prostu nie dołoży.....
To działa - ale jest przekombinowane:
var
lancuch, linia: string;
ile, len,i: integer;
begin
len := Length(lancuch);
ile:= len div 8;
for i:=1 to ile do
begin
linia:=Copy(lancuch,(8*i)-7,(8*i)-8*(i-1));
memo1.lines.add(linia);
end;
//tylko upraszczam troszke:
for i:=1 to (length(lancuch)+7)shr 3 do memo1.lines.add(Copy(lancuch,(i shl 3)-7,8)
// 8, bo i tak nie skopiuje spoza konca stringa (3-ci parametr to długość)
// shl/shr 3= */div 8 [mf]