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

Вниз

TreeView , как пробежатся по нему?   Найти похожие ветки 

 
Phoenix ©   (2007-06-28 10:09) [0]

Есть некое дерево типа TTreeView, необходимо пробежатся по нему в том числе и по вложенным веткам которые заполняются только на их раскрытие. Как это сделать? Не с VirtualEditTree не с VirtualStringTree проблем не возникало, тут же никак не получается пробежатся по дереву полностью.


 
Jeer ©   (2007-06-28 10:22) [1]

GetNextChild, GetNextSibling + F1


 
ЮЮ ©   (2007-06-28 10:31) [2]

> Как это сделать?

например рекурсивно по TreeView.Items, на каждом шаге итерации программно раскрывая каждый узел (без рекурсии) и захлопывая, если он был захлопнут до нашего вмешательства.
Тогда его геометрия останется той же, что и до нашего цикла. Перерисовку лучше на это время отключить.

>Не с VirtualEditTree не с VirtualStringTree проблем не возникало
Верится с трудом.
Или какие реальные трудности с subj-ем? Что не получилось из того, что работало с VirtualTree ?


 
Phoenix ©   (2007-06-28 12:02) [3]

> Или какие реальные трудности с subj-ем? Что не получилось из того, что работало с VirtualTree ?

Конкретно проблема именно прбежатся по дереву. Это я и указал выше.мне собственно говоря необходимо сделать поиск по дереву, и вот такая проблема возникла что пробежать не получается. Не могу даже узнать количество элементов на том или ином уровне.

> например рекурсивно по TreeView.Items, на каждом шаге итерации программно раскрывая каждый узел (без рекурсии) и захлопывая, если он был захлопнут до нашего вмешательства.
Тогда его геометрия останется той же, что и до нашего цикла. Перерисовку лучше на это время отключить.

Примерчик можно, если не сложно.


 
Johnmen ©   (2007-06-28 12:15) [4]


> Не могу даже узнать количество элементов на том или ином уровне.

Count
Читайте же наконец F1 !


 
Malik ©   (2007-06-28 17:06) [5]


for i:=0 to TreeView1.Items.Count-1 do begin
   ...
   if TreeView1.Items[i].count=0 then begin //означает что данный узел не имеет дочерних узлов
         ...
         end;
   end;


 
Игорь Шевченко ©   (2007-06-28 17:53) [6]

Я наверное что-то не понимаю, но разве Items как-то связаны с отображаемым деревом ? В смысле открыты они при отображении или закрыты - какая разница ?


 
Gadenysh   (2007-06-28 19:19) [7]

Сделай на VST, раз там проблем нет. Хотя не верится в это совсем.
А пробежаться по нодам, которые заполняются на экспанде - значит надо заполнить сразу все дерево (вся виртуальность насмарку) и бегать по нему сколько хочешь.


 
vpbar   (2007-06-28 19:59) [8]

>>Phoenix ©
>>заполняются только на их раскрытие
а не проще пробежаться по тому откуда заполняются узлы TreeView?


 
Jeer ©   (2007-06-29 10:23) [9]


> Игорь Шевченко ©   (28.06.07 17:53) [6]
>
> Я наверное что-то не понимаю, но разве Items как-то связаны
> с отображаемым деревом ? В смысле открыты они при отображении
> или закрыты - какая разница ?


Как правило разница возникает при использовании TTreeView в режиме TDBTreeView и чтении только визуализированных items.
В этом случае, действительно, count ничего не даст, да и вообще методы TTreeView - тоже.
Придется или загрузить все дерево сразу (в этом случае все стандартно) или эмулировать движение по веткам и подгрузку данных из dataset.


 
Игорь Шевченко ©   (2007-06-29 10:27) [10]

Jeer ©   (29.06.07 10:23) [9]

Что за зверь TDBTreeView ?


 
Jeer ©   (2007-06-29 10:53) [11]


> Есть некое дерево типа TTreeView,


Всего лишь предположение мое - у него наследник от TTreeView для работы с TDataset.


 
Ega23 ©   (2007-06-29 10:58) [12]


> Что за зверь TDBTreeView ?


Вот, как раз сейчас переписываю.


 
Jeer ©   (2007-06-29 11:32) [13]


> Ega23 ©   (29.06.07 10:58) [12]
>
>
> > Что за зверь TDBTreeView ?
>
>
> Вот, как раз сейчас переписываю.


Намедни тоже пришлось:))


 
Игорь Шевченко ©   (2007-06-29 12:00) [14]

Jeer ©   (29.06.07 10:53) [11]


> Всего лишь предположение мое


Стандартного компонента нету. Есть конечно ряд сторонних на эту тему, но в тех сторонних, что я видел, проблема обхода решается иначе. Например, запросом без учета иерархии...


 
Jeer ©   (2007-06-29 12:11) [15]

Игорь Шевченко ©   (29.06.07 12:00) [14]

В моих постах нет намека на его "стандартность".

Если TDBTreeView строится на основе стандартного TTreeView, то возможны, как минимум, два варианта получения данных - полным запросом и подзапросом на раскрытие узла.
С полным запросом все понятно - все данные налицо, но задача перемещения по веткам естественным образом легче решается посредством методов TTreeView.
Если же "самопальный" TDBTreeView таков, что работает только по подзапросам то и перемещение по TTreeView может быть осмысленным только после перезапроса и восстановления структуры под-иерархии. До этого, оставаясь в рамках такого компонента, никаким образом узнать что-либо о "ветвистости" не представляется возможным.



Страницы: 1 вся ветка

Текущий архив: 2007.07.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
15-1182836920
Руслан56
2007-06-26 09:48
2007.07.22
востановление *.DBF /////// HELP


15-1182302301
SerJaNT
2007-06-20 05:18
2007.07.22
Firewall в Win2000 Server


1-1179320420
Alexys
2007-05-16 17:00
2007.07.22
списки


9-1156370315
Nobody_1988
2006-08-24 01:58
2007.07.22
About Shaders


3-1177134987
roman_ln
2007-04-21 09:56
2007.07.22
DBListBox1 список не активен