Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.15;
Скачать: CL | DM;

Вниз

Коллеги, приветствую. Теперь я прошу помощи.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-46318
VJar
2002-04-03 16:25
2002.04.15
Процент копирования


14-46502
Андрей Сенченко
2002-03-05 17:33
2002.04.15
Компоненты для архивации


3-46296
Good Man
2002-03-22 19:37
2002.04.15
Как в при коннекте к БД, через ADO определить роль пользователя?


1-46314
Creecker Dikar
2002-03-25 15:31
2002.04.15
Опять с иконками проблемы!


1-46443
Leonon
2002-04-03 09:54
2002.04.15
TMemo - где предел вместимости под Win98 ???