Решил вот так, если вдруг кому надо
procedure TForm1.SortGroup;
var
i, j: integer;
elementscount: byte;
begin
elementscount := Form1.RoomsScrollBox.Content.Children.Count;
for i := 1 to elementscount do
for j := 0 to elementscount - 1 do
begin
if (Form1.RoomsScrollBox.Content.Children.Items[j] as TEssence).SortIndex = i then
begin
(Form1.RoomsScrollBox.Content.Children.Items[j] as TEssence).Position.Y := 10000;
break;
end;
end;
end;
соответственно элементы с самым низким индексом будут наверху. Единственное ограничение, что индексы элементов должны быть подряд, без пропусков. Это не очень удобно, надо будет переделать