schau dir mal dein neues Clear an, dein "i" ist dort fehl am Platz.
Und in der SetMethode ist das freigeben überflüssig. Du gibst dort speicher frei und forderst sofort danach neuen Speicher an. Sinnvoller wäre es den einmal reservierten Speicher weiter zu nutzen.
PRect(inherited Items[AIndex])^ := AItem;
und zu deinem Clear. Es geht auch so
Delphi-Quellcode:
var i: Integer;
begin
for i := 0 to Count - 1 do
Dispose(inherited Items[i]);
inherited Clear();
Anstelle von Dispose kannst du natürlich auch weiter "FreeMem" nutzen.