Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TreeView , как пробежатся по нему? [D7, WinXP]


Phoenix ©   (2007-06-28 10:09:00) 

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


Jeer   (2007-06-29 12:11:00) [1]

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

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

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


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

Jeer ©   (29.06.07 10:53) [11]


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


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


Jeer   (2007-06-29 11:32:00) [3]


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


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


Ega23   (2007-06-29 10:58:00) [4]


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


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


Jeer   (2007-06-29 10:53:00) [5]


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


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


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

Jeer ©   (29.06.07 10:23) [9]

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


Jeer   (2007-06-29 10:23:00) [7]


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


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


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

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


Gadenysh   (2007-06-28 19:19:00) [9]

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


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

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


Malik   (2007-06-28 17:06:00) [11]


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


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


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

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


Phoenix   (2007-06-28 12:02:00) [13]

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

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

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

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


ЮЮ   (2007-06-28 10:31:00) [14]

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

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

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


Jeer   (2007-06-28 10:22:00) [15]

GetNextChild, GetNextSibling + F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо