Цитата:
Если честно, я почти не понимаю код! Вот взять это: recadd - что это такое?
|
Могу объяснить:
recadd - это рекурсивная функция принадлежащая методу
TClassesTree.MakeTree
Код:
procedure TClassesTree.MakeTree(tree: TTreeView);
var i:integer;
function recadd(id:integer; itemto:TTreeNode):integer;
var i:integer;
begin
i := FNodes[id].fchildid;
while (i<>-1) do i := recadd(i,tree.Items.AddChild(itemto,FNodes[i].name));
Result := FNodes[id].nextid;
end;
begin
if not IsLinked then MakeLinks;
i := FNodes[0].fchildid;
while (i<>-1) do i := recadd(i,tree.Items.Add(nil,FNodes[i].name));
end;
Рассмотрим работу этого метода подробнее:
1.
if not IsLinked then MakeLinks; - проверка, установлены ли в дереве связи между узлами.
IsLinked становиться равной false при добавлении нового узла (т.е. класса ).
2.
i := FNodes[0].fchildid; - построение дерева (т.е. добавление узлов в
tree: TTreeView) начинается с первого потомка корня.
Само добавление происходит при вызове
tree.Items.Add(nil,FNodes[i].name)
3.
while (i<>-1) do i := recadd(i,tree.Items.Add(nil,FNodes[i].name));
Для всех потомков корня вызывается функция recadd которая возвращает следующий узел в списке потомков.
4. в самой же функции происходит добавление в дерево всех потомков к.л. узла.
Может не слишком ясно объясняю, но рекурсию вообще-то лучше рассматривать на примере.