![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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