Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
ВнизКоллеги, приветствую. Теперь я прошу помощи. Найти похожие ветки
← →
Song (2002-04-01 21:12) [0]Не получается копирнуть ветвь со всеми внутренними подветвями из одного дерева в другое дерево. Использую рекурсию:
Function CopyItems(ItemDest,ItemSource:TTreeNode):Boolean;
Var n,m:Integer;
TempItem:TTreeNode;
Begin
try
Result:=True;
n:=ItemSource.Count;
m:=0;
While m<n Do
Begin
TempItem:=TTreeView(ItemDest.TreeView).Items.AddChild(TempItem,"");
TempItem.Assign(ItemSource.Item[m]);
CopyItems(TempItem,ItemSource.Item[m]);
Inc(m);
End;
except
Result:=False;
end;
End;
Вызываю функцию так: (Root1 - корневая ветвь)
Node:=Items[t];
Repeat
try
IF not CopyItems(Root1,Node) then Break;
Node:=Node.GetNextSibling;
except
Break;
end;
Until False;
Перебровал многое. Кое-что получается, но наживаю другие проблемы. Вообщем не работают две вещи:
1) Не добавляются пустые ветви (без детей) - Level1
2) Не добавляются промежуточные ветви: - Level2,Level11
например
Level1
Level11
-Level2
-Level3
-node1
-node2
-node3
Level3, её подветви (node1,2,3) добавляются без проблем. Пробовал исправить чтобы добавлялась Level1 и 11 но нажил другие проблемы.
Вообщем я буду пытаться, но заранее благодарю всех кто вникнет в судь проблемы и поможет разобраться.
← →
Song (2002-04-01 21:14) [1]Очепятка:
TempItem:=TTreeView(ItemDest.TreeView).Items.AddChild(TempItem,"") на самом деле у меня
TempItem:=TTreeView(ItemDest.TreeView).Items.AddChild(ItemSource,"");
Это просто уже последствия борьбы с проблемой :))
← →
Набережных С. (2002-04-01 22:20) [2]Вообще-то эта процедура(которая у тебя - функция) писалась для копирования дочерних итемов одного узла в другой уже существующий узел. Понимаешь? Она копирует дочернии узлы ItemSource, но не сам элемент ItemSource.
Нельзя же так бездумно копировать!
← →
MBo (2002-04-01 22:58) [3]Деревья всегда разные?
так работает
procedure CopyItems(ItemDest,ItemSource:TTreeNode);
Var i,j:Integer;
TempItem,TempItem2:TTreeNode;
Begin
TempItem:=TTreeView(ItemDest.TreeView).Items.AddChild(ItemDest,"");
TempItem.Assign(ItemSource);
for i:=0 to ItemSource.Count-1 do begin
TempItem2:=TTreeView(ItemDest.TreeView).Items.AddChild(TempItem,"");
TempItem2.Assign(ItemSource.Item[i]);
for j:=0 to ItemSource.Item[i].count-1 do
CopyItems(TempItem2,ItemSource.Item[i].item[j]);
End;
End;
← →
Song (2002-04-02 07:05) [4]2Набережных С. (01.04.02 22:20)
Я и не утверждал, что это мой код. Мог написать сам да и намеревался сделать, если не получится.
2MBo © (01.04.02 22:58)
Да, всегда разные. Спасибо, я попробую сегодня.
← →
MBo (2002-04-02 07:43) [5]Я к тому, что если возможно применение процедуры в рамках одного
Treeview, надо отслеживать и запрещать копирование ветки в ее подузел (беск. рекурсия)
← →
Song (2002-04-02 08:16) [6]Спасибо MBo © огромное!
Всё работает чудно.
С меня 2 бутылки пива, если употребляете. :)))
← →
Набережных С. (2002-04-02 16:42) [7]
> Song © (02.04.02 07:05)
Ну при чем здесь это? Никто тут ничего нового не изобретет, все давно придумано. Я о том что нужно вникать в код, а не просто бездумно копировать, а потом заявлять, что код нерабочий.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c