Вроде удалось реализовать, но метод не очень быстрый. Если кто найдет способ быстрее, то пишите!
Сейчас опишу на том примере решение:
Код:
for i := 0 to Length(R3) - 1 do
begin
Level := 0;
TreeView.Items.AddChild(TreeView.Items[FindItem(Level)], R3[i].Name);
for j := 0 to Length(R3[i].R2)-1 do
begin
Level := 1;
TreeView.Items.AddChild(TreeView.Items[FindItem(Level)], R3[i].R2.Name);
for k := 0 to Length(R3[i].R2[j].R1)-1 do
begin
Level := 2;
TreeView.Items.AddChild(TreeView.Items[FindItem(Level)], R3[i].R2[j].R1[k].Name);
end;
end;
end;
Где FindItem - функция, которая ищет элемент по уровню:
Код:
function FindItem(Level: integer):integer;
var
Index: integer;
begin
Index := CodeEditorForm.Structure.Items.Count - 1;
while index > 0 do
begin
if TreeView.Items[index].Level = Level then
break
else
Index := Index - 1;
end;
result := index;
end;