Die Art und Weise, wie du den Record kopierst ist "ungünstig".
Besser man vermeidet permanente Zuweisungen mit Assign:
Delphi-Quellcode:
procedure MoveInfoRecord(var src, dst:TInfo);
begin
dst.Textinfo := src.Textinfo;
dst.Bmp := src.bmp); // nur den Objektzeiger kopieren
dst.Delete := src.Delete;
end;
procedure ClearArray;
var
i, k: Integer;
begin
for i := High(Info) downto 0 do
begin
if Info[i].Delete then
begin
// zuerst Bitmap freigeben
Info[i].Bmp.Free;
// der Platz i ist jetzt quasi ungültig
// jetzt die gültigen Daten "runterschieben"
for k := i to High(Info) - 1 do //Rest
begin
MoveInfoRecord(Info[k+1], Info[k]);
end;
// Array um 1 verkürzen
SetLength(Info, Length(Info) - 1);
end;
end;
end;