Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Вниз

TTreeview ??? 


Dr. Web   (2002-02-27 13:11) [0]

Извеняюсь за тупой вопрос, но с Деревьями до сих пор не сталкивался...
Вопрос вот какой
Есть два тривьюва
нужно к Item"у одного добавить все дерево из другого,
а у меня не получается....
(думаю есть более простой вариант чем перебор всех чайлдов в другом Вьюве и создание схожих итемов в первом вьюве)
помогите плз.



troits   (2002-02-27 13:32) [1]

IMHO, другого пути нет.
TTreeView - просто оболочка над соответствующим Windows - контролом, поэтому, боюсь, придется делать именно проходом по исходному дереву.



pasha_golub   (2002-02-27 14:30) [2]

Надо чтобы в первом дереве был один родитель-item, тогда его можно просто добавить во второй!



Dr. Web   (2002-02-27 16:39) [3]

pasha_golub
так и есть
рождитель во втором вьюве один



troits   (2002-02-27 17:24) [4]

Непонятно, что значит

>pasha_golub © (27.02.02 14:30)
>"один родитель-item"

>Dr. Web © (27.02.02 16:39)
>рождитель во втором вьюве один

Это вы о чем, о корне дерева, что - ли, который просто по определению дерева один?



Song   (2002-02-27 17:31) [5]

Да, недавно была такая же проблема. Ответ удручающий: только перебором исходного с построением такой же структуры в результирующем дереве. Assign и AssignTo для TTreeView не работают :( есть MoveTo, но он не переносит детей (это делает только аист :))) ) вообщем MoveTo переносит только несколько свойств исходного в результирующее дерево, подветви он не переносит.



Набережных С.   (2002-02-27 17:42) [6]

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=9129



Dr. Web   (2002-02-27 18:02) [7]

Набережных С.
пасибки щас буду пробовать :)



Dr. Web   (2002-03-01 11:04) [8]

Попробовал процедурку, которую предоставил Наб ережных С.
и вот что у меня получилось
делает копию чайлдов только первого уровня...
возле тех, у которых есть свои чайлды - стоят плюсики
НО
дальше они не открываются :(
пробовал смотреть что за прикол
так у чайлдов то Итем Каунт = 0 8-[ ]



Song   (2002-03-01 16:49) [9]

Слушай, я когда писал копирование ручками, я и не знал, что есть возможность более легко, потому что все методы Assign у меня выдавали AE. Поэтому я написал процедуру сам.
Вот алгоритм:
1.Берёшь первую ветку. Создаёшь ветку с таким названием в
результирующем дереве.
2.Смотришь детей. Если есть проходишь по ним в цикле созавая таких же в результирующем.
3. Независимо от того, были дети или нет, делаешь GetNextSibling и переводишься на следющую ветвь.
4. Делаешь шаг 1.

Я конечно могу тебе её прислать, но адаптировать лень, она сделана под конкретное исходное дерево и под конкретное результирующее, поэтому там сразу трудно её сделать, чтобы она у тя пошла сразу Ok.



Набережных С.   (2002-03-01 17:11) [10]


> Dr. Web © (01.03.02 11:04)

Ну давай, показывый, чего начудил.



Polevi   (2002-03-01 17:39) [11]

procedure TForm1.InsertTreeView(DestTreeView:TTreeView;DestNode, SourNode: TTreeNode);
var
dn,n:TTreeNode;
begin
dn:=DestTreeView.Items.AddChild(DestNode,SourNode.Text);
n:=SourNode.getFirstChild;
while Assigned(n) do
begin
InsertTreeView(DestTreeView,dn,n);
n:=SourNode.GetNextChild(n);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
n:TTreeNode;
begin
n:=SourTree.Items.GetFirstNode;
while Assigned(n) do
begin
//добавляем в первую ветку дерева-получателя (можно передать любую)
InsertTreeView(DestTree,DestTree.Items[0],n); n:=n.GetNextSibling;
end;
end;



Dr. Web   (2002-03-04 10:29) [12]

ВСЕМ ПАСИБКИ!!!!!!!!!!!!!!!!!!!
разобрался!!!!! :)
уже все работает, спасибо всем, кто откликнулся
процедура, которую предоставил Набережных С. РАБОТАЕТ КРУТО
Пример от Polevi © тоже работает, НО она только копирует сам вид дерева, без даных, которые еще зашити в поле data...
Разобрался, а проблемка была не в даных мне примерах с этого форума
просто я использовал ТрииВью, из примеров с IB.demo.ru
(древовидные даные)а там просто в тривью чайлды добавлялись по мере открытия каждого узла....
решил просто: в процедуру копирования добавил строчку построения даного узла и все!!! :)))
а задача у меня была такая:
есть мастер и детаил таблица (древовидные даные)
НУЖНО ЭТИ ДАНЫЕ ОТОБРАЗИТЬ в одном тривьюве :)
одна таблица справочник типов абонентов, а другая - собственно абоненты и ихние подразделы... все получилось
Еще раз спасибо за помощь!!!!




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.015 c
1-57370           Aleksandr             2002-03-04 15:44  2002.03.18  
Почему поток не возобновляется после паузы?


3-57282           af                    2002-02-18 15:49  2002.03.18  
Вопрос по фильтрации , использую RXfilter из библиотеки RX


1-57464           Nuce                  2002-03-04 02:26  2002.03.18  
PaintBox?Наболело...


4-57560           andersen              2002-01-15 21:40  2002.03.18  
Как узнать в Интернете я или нет?


4-57549           FLASH....             2002-01-18 18:45  2002.03.18  
КАК ОТЛОВИТЬ ВЫХОД С WINDOWS ????