Diese "Löcher" sollten eigentlich gar nciht entstehen können. (Solange man sich dabei nicht selbst ferfriemelt

)
Zum Löschen brauchst du nur für jede leere Zeile Delete aufrufen.
Kleines Beispiel:
Delphi-Quellcode:
program RemoveEmptyLines;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes;
var
StringList : TStrings;
i : Integer;
begin
StringList := TStringList.Create();
StringList.Add('1');
StringList.Add('2');
StringList.Add('');
StringList.Add('4');
i := 0;
while i < StringList.Count do
begin
if StringList[i] = '' then
StringList.Delete(i)
else
Inc(i);
end;
for i := 0 to pred(StringList.Count) do
Writeln(StringList[i]);
Sleep(5000);
end.