Du benutzt die Komponente TImage zum Anzeigen - diese ist aber einfach nicht zum Verschieben gedacht und entwickelt. Die Lösung ist, die Unterobjekte auf eine gemeinsame, in der Größe feste Canvas zu bringen, z.B. die der Form. Die Unterobjekte (bzw. ihr Bitmap) speicherst du in der Klasse TBitmap (der Name legt es schon nahe). Im OnPaint der Form kopierst du nun jedes Bitmap per TCanvas.Draw auf deren Canvas. Zusammen mit DoubleBuffered sollte es kein Flimmern mehr geben, Bitmapteile über außerhalb der Form-Canvas werden einfach abgeschnitten.
=>
OffScreenBitmap