Hm, also so kann ich dir leider nicht helfen, sorry.
Aber wo ich deinen Code nochmal ansehe, entstehen u.U. Speicherlecks (sog. Memory Leaks).
Du erzeugst eine StringList und gibst dessen Speicher nicht mehr frei.
Richtig macht man das so (bei allen Objekten, die du mit ".Create" erstellst):
Delphi-Quellcode:
save := TStringlist.Create;
try
// hier dein Code, in dem du auf "save" zugreifst
finally
// Speicher freigeben
FreeAndNil(save); // oder: save.Free;
end;