Wenn es sich um 10px bewegt, aber das hindernis weniger als 10px breit ist, dann mußt du auch zwischenpositionen prüfen. (im Extremfall eben jedes Pixel)
Und der Rest wurde doch schon gesagt?
* Du berechnest die neue Position
* prüfst ob es eine Kollision geben würde
* und wenn es kollidiert, dann wird das Objekt eben nicht bewegt.
Types.IntersectRect
TRect.IntersectRect
Types.PtInRect
TRect.PtInRect bzw.
TPoint.PtInRect