Hola.
En tu mensaje no dices si el numero de shapes es fijo o variable. De todas formas lo mejor que puedes hacer es crearlos en el FormCreate del formulario principal y asignarle a cada objeto el evento OnMouseDown, OnMouseUp y OnMouseMove y controlar el movimiento de cada uno de ellos. No tengo el Delphi por aqui ahora (estoy en la universidad) pero sería algo tal que así:
en el Formcreate
for c:=0 to 100 do begin
S:=Tshape.Create(self);
S.OnMouseDown:=ShapeMouseDown;
S.OnMouseUp:=ShapeMouseUp;
S.OnMouseMove:=ShapeMouseMove;
end;
con los eventos ShapeMouseDown y ShapeMouseUp gestionas donde has hecho click y donde has soltado el raton
luego en el evento ShapeMouseMove sería algo así como
Desplazamiento:=PosicionActual-PosicionAnterior;
TShape(Sender).Left:=TShape(Sender).Left+Desplazamiento;
TShape(Sender).Top:=TShape(Sender).Top+Desplazamiento;
Siento hacerlo de memoria :)
Espero que te de la idea