Wer hat denn geschrieben, dass du in dem Destroy eines einzelnen (!) TSprite auf die Liste aller (!) Sprites zugreifen sollst? Ich hatte doch schon geschrieben wie es aussehen muss:
So:
Delphi-Quellcode:
type
TSprite = class
...
public
destructor Destroy; override;
end;
destructor TSprite.Destroy;
begin
inherited;
if h_Bitmap <> 0 then
begin
DeleteObject(h_Bitmap);
h_Bitmap := 0;
end;
end;
// und dann an deiner Stelle nur noch:
Sprites.Free;