Главная страница
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.012 c
3-46241
Алена
2002-03-24 21:52
2002.04.15
База в одноранговой сети


6-46468
petr
2002-02-04 12:45
2002.04.15
Лишняя строчка в attachment (SMTP)


3-46275
Зинец Виктор
2002-03-13 14:08
2002.04.15
DCOM и базы данных - как подружить?


1-46305
Chris
2002-04-03 14:52
2002.04.15
Спасение файлов с NTFS


1-46377
Swinger
2002-03-29 21:42
2002.04.15
Размер программы