Para que no parpadee deberias usar lo que seria "double buffering" pero en una Form.
Deberias tener un TBitmap con el tamaño de toda la Form.
 
var
  Buffer: TBitmap;
begin
  Buffer := TBitMap.Create;
  Buffer.Width := Form1.Width;
  Buffer.Height := Form1.Height;
end;
 
 
Luego,  por cada ciclo del timer:
 
//borrar el buffer
Buffer.Canvas.FillRect(Rect(0,0, Buffer.Width, Buffer.Height));
//dibujar la pelota en el canvas del buffer
Buffer.Canvas.Draw(X,Y, Pelota);
//volcar el buffer sobre la la Form comenzando en (0,0)
//se puede comenzar en otra posicion
Form1.Canvas.Draw(0,0, Buffer);
 
 
Si lo que etabas haciendo es mover un TPicture cambiando (X,Y), y tenes varias Botones, Edits  y otras cosas en la forma,  podrias probar con hacer el buffer del tamaño minimo necesario para que la imagen que se mueve quepe en el y el resto sigue siendo igual. (no te olvides de liberar el buffer: Buffer.Free).