>>800 は 行数が多いときは重い処理だから、軽くするなら
http://www.geocities.co.jp/SiliconValley-Oakland/8522/data/uSpliter.txt
を使って

function GetLine(s:string;n:integer):string;
var i:Integer;
begin
  with TStringSpliter.Create(s) do try
   for i:=0 to n-1 do GetSplitStr(#13#10);
   Result:= GetSplitStr(#13#10);
  finally free;end;
end;

とするといい。