![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TTreeview ??? [D6, Win95/98, WinME, NT4, Win2k, WinXP]
Dr. Web © (2002-02-27 13:11:00)Извеняюсь за тупой вопрос, но с Деревьями до сих пор не сталкивался...
Вопрос вот какой
Есть два тривьюва
нужно к Item"у одного добавить все дерево из другого,
а у меня не получается....
(думаю есть более простой вариант чем перебор всех чайлдов в другом Вьюве и создание схожих итемов в первом вьюве)
помогите плз.
Dr. Web (2002-03-04 10:29:00) [1]ВСЕМ ПАСИБКИ!!!!!!!!!!!!!!!!!!!
разобрался!!!!! :)
уже все работает, спасибо всем, кто откликнулся
процедура, которую предоставил Набережных С.РАБОТАЕТ КРУТО
Пример от Polevi ©тоже работает, НО она только копирует сам вид дерева, без даных, которые еще зашити в поле data...
Разобрался, а проблемка была не в даных мне примерах с этого форума
просто я использовал ТрииВью, из примеров с IB.demo.ru
(древовидные даные)а там просто в тривью чайлды добавлялись по мере открытия каждого узла....
решил просто: в процедуру копирования добавил строчку построения даного узла и все!!! :)))
а задача у меня была такая:
есть мастер и детаил таблица (древовидные даные)
НУЖНО ЭТИ ДАНЫЕ ОТОБРАЗИТЬ в одном тривьюве :)
одна таблица справочник типов абонентов, а другая - собственно абоненты и ихние подразделы... все получилось
Еще раз спасибо за помощь!!!!
Polevi (2002-03-01 17:39:00) [2]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;
Набережных С. (2002-03-01 17:11:00) [3]
> Dr. Web © (01.03.02 11:04)
Ну давай, показывый, чего начудил.
Song (2002-03-01 16:49:00) [4]Слушай, я когда писал копирование ручками, я и не знал, что есть возможность более легко, потому что все методы Assign у меня выдавали AE. Поэтому я написал процедуру сам.
Вот алгоритм:
1.Берёшь первую ветку. Создаёшь ветку с таким названием в
результирующем дереве.
2.Смотришь детей. Если есть проходишь по ним в цикле созавая таких же в результирующем.
3. Независимо от того, были дети или нет, делаешь GetNextSibling и переводишься на следющую ветвь.
4. Делаешь шаг 1.
Я конечно могу тебе её прислать, но адаптировать лень, она сделана под конкретное исходное дерево и под конкретное результирующее, поэтому там сразу трудно её сделать, чтобы она у тя пошла сразу Ok.
Dr. Web (2002-03-01 11:04:00) [5]Попробовал процедурку, которую предоставил Наб ережных С.
и вот что у меня получилось
делает копию чайлдов только первого уровня...
возле тех, у которых есть свои чайлды - стоят плюсики
НО
дальше они не открываются :(
пробовал смотреть что за прикол
так у чайлдов то Итем Каунт = 0 8-[ ]
Dr. Web (2002-02-27 18:02:00) [6]Набережных С.
пасибки щас буду пробовать :)
Набережных С. (2002-02-27 17:42:00) [7]http://www.delphikingdom.com/asp/answer.asp?IDAnswer=9129
Song (2002-02-27 17:31:00) [8]Да, недавно была такая же проблема. Ответ удручающий: только перебором исходного с построением такой же структуры в результирующем дереве. Assign и AssignTo для TTreeView не работают :( есть MoveTo, но он не переносит детей (это делает только аист :))) ) вообщем MoveTo переносит только несколько свойств исходного в результирующее дерево, подветви он не переносит.
troits (2002-02-27 17:24:00) [9]Непонятно, что значит
>pasha_golub © (27.02.02 14:30)
>"один родитель-item"
>Dr. Web © (27.02.02 16:39)
>рождитель во втором вьюве один
Это вы о чем, о корне дерева, что - ли, который просто по определению дерева один?
Dr. Web (2002-02-27 16:39:00) [10]pasha_golub
так и есть
рождитель во втором вьюве один
pasha_golub (2002-02-27 14:30:00) [11]Надо чтобы в первом дереве был один родитель-item, тогда его можно просто добавить во второй!
troits (2002-02-27 13:32:00) [12]IMHO, другого пути нет.
TTreeView - просто оболочка над соответствующим Windows - контролом, поэтому, боюсь, придется делать именно проходом по исходному дереву.