Задайте при создании шейпы свойство таг равный переменной i, а у кнопки подключите обработчик жима по ней, и в нём по тагу можно отловить кружочек который нужно передвинуть.
Вот подобное по теме
З.Ы. Немного код не рабочий должен быть - здесь
Код:
...
if a=0 then s1[i].Brush.Color:=clred; s1[i].Pen.Color:=clblack;
if a=1 then s1[i].Brush.Color:=clblue; s1[i].Pen.Color:=clgreen;
if a=2 then s1[i].Brush.Color:=clblack; s1[i].Pen.Color:=clred;
...
блоков бегиненд не хватает после then, иначе цвет карандашика у шейпы будет всегда clRed, да и наверное лучше это кейсом делать
Код:
...
with s1[i] do
case Random(StrToInt(Edit1.Text)) of
1: begin Brush.Color:= clBlue; Pen.Color:= clGreen; end;
2: begin Brush.Color:= clBlack; Pen.Color:= clRed; end;
else
begin Brush.Color:= clRed; Pen.Color:= clBlack; end;
end;{case}
...
З.Ы.З.Ы. Только сейчас заметил - капшн на кнопках это конечно хорошо, но имя им вменяемое присвоить, да ещё и с приплюснутым счётчиком ещё лучше бы, намного легче потом их искать будет в рантайме и веселей