Ну как бы всмотрись в код внимательно

Не по X, а по Y. А переделать под свои нужды - дело минутное. Ты же спросил как рандомно раскидать, я рандомно раскидал Конретики же не было как надо
Код:
procedure ShowRandom(StartTop, StartLeft, OffsetY, OffsetX: Integer; ObjList: TList);
var
x,y, i: Integer;
tempList: TList;
begin
if ObjList.Count = 0 then Exit;
tempList := TList.Create;
tempList.Assign(ObjList);
x := StartLeft;
y := StartTop;
while tempList.Count > 0 do
begin
i := Random(tempList.Count);
TControl(tempList.Items[i]).Left := x;
TControl(tempList.Items[i]).Top := y;
Inc(x, OffsetX);
Inc(y, OffsetY);
tempList.Delete(i);
end;
tempList.Free;
end;
Теперь и по х и по y раскидывает.