たびたびすみません。どうもうまくいきません。
TShapeを配列でたくさん作って、それぞれに共通の関数で処理しているのですが、
根本的にやり方がタブーなんでしょうか?

★最初にTShapeを配列でとって
Var
MyShape : array[1..10] of TShape;

★Form1のクリエイト時に
procedure Form1.FormCreate(Sender: TObject);
begin
for i := 1 to 10 do
begin
MyShape[i] := MyShape.Create(Form1);
MyShape[i].Parent := Form1;
MyShape[i].OnMouseDown := MyShapeMousedown;
MyShape[i].OnMouseMove := MyShapeMouseMove;
MyShape[i].OnMouseUp := MyShapeMouseUp;
end;
end;

★クリックされた時の関数は
procedure Form1.MyShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SetCaptureControl(TControl(Sender)); ←☆
for i:=1 to 10 do
if Shape[i] = Sender then ここで配列の中のどのコンポーネントか判断している。
begin

マウスを早く動かすと、移動中のShapeがおいてけぼりになってしまいます。
SetCaptureControlをマウスクリック時に設定しても、マウスを動かしたときにMyShapeMouseMove()に処理が来ないです。