You should use breakpoints to find out where it goes wrong.

My guess is, that something is destroyed when you call SpriteEngine.Clear, and the Constructor of TBallsprite assumes that object to exist.

Set some breakpoints in the constructor of TBallSprite. You could also add some breakpoints to the TSprite or TImageSprite constructors. I'm sure you will find the bug.

Good luck!