Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.005 c
1-46317
Сатир
2002-04-03 16:27
2002.04.15
Прячем мышку


1-46402
Ne0N
2002-04-02 13:34
2002.04.15
Загрузка Word овских DOC ов


4-46541
Poirot
2002-02-07 02:54
2002.04.15
Как вставить в системное меню POPUP....


1-46325
QWest
2002-04-02 17:49
2002.04.15
Где ошибка?


1-46333
hooky-mars
2002-04-03 21:44
2002.04.15
Масивы не понятно какого вида





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский