Nur als Tips:
Mit High(Array) / Low(Array) kann man obere und untere Grenze eines Array ermitteln und dieses mit
for i:=Low(Array) to High(Array)
durchlaufen. Damit könntest du dir die Variable i sparen.
Und der Vergleich
if error=true /
if error=false ist unschön und doppeltgemoppelt (und birgt auch eine Fehlerquelle, auch wenn ich die trotz der vielen Erklärungen die an dieser Stelle immer kommen, nicht verstanden habe).
if error then reicht vollkommen bzw.
if not error then.
Liest sich doch auch schöner.
Die
Access Violation klingt danach, das auf ein nicht vorhandenen Array-Element zugegriffen wird. Ich glaube da du immer nach dem hinzufügen eines neuen Namens schon ein Inc(i) machst, bist du mit dem Zähler um eines zu hoch.