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

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

переход по узлам в TreeView - какие-то заморочки [D6, D7, Win2k, WinXP]


malamba ©   (2005-03-06 12:46:00) 

Есть дерево со вложенными узлами.
Когда пользуюсь методом GetNext ( причем, все согласно примеру из Delphi) это гадство переходит только по открытым узлам. Если у узла есть дети, но они скрыты ( узел не развернут), то GetNext их обходит стороной.
Как бы организовать переход по все узлам, независимо от их раскрытия?
Методом If ...Items[i]= ..., сразу скажу - не пользуюсь.


malamba   (2005-03-15 10:39:00) [1]

GetNext это вовсе не то, что Items[i]=.

Во всяком случае так говорят в Инете:
http://delphiworld.by.ru/base/treeview_nodes_access.html


ЮЮ   (2005-03-15 04:18:00) [2]

>Ольга, только не это.
>На больших списках это жутко тормозит.

Удивительно, как TTreeNode.GetNext c дюжиной строк кода может ускорить этот процесс, если последовательнось обхода узовлов аналогична той, что и в
 for i := 0 to TreeView.Items.Count - 1


malamba   (2005-03-14 10:11:00) [3]

Виноват, задержался.
Возвращаясь к напечатанному:

Выкладываю DFM
     object TreeViewZayavky: TTreeView
       Left = 0
       Top = 5
       Width = 276
       Height = 381
       Color = 15268607
       Font.Charset = DEFAULT_CHARSET
       Font.Color = clNavy
       Font.Height = -11
       Font.Name = 'MS Sans Serif'
       Font.Style = []
       HideSelection = False
       Images = ImageListTree
       Indent = 19
       ParentFont = False
       ReadOnly = True
       TabOrder = 0
       OnClick = TreeViewZayavkyClick
       OnCustomDrawItem = TreeViewZayavkyCustomDrawItem
       OnEnter = TreeViewZayavkyClick
       OnExpanding = TreeViewZayavkyExpanding
       OnKeyUp = TreeViewZayavkyKeyUp
     end


malamba   (2005-03-07 17:04:00) [4]

Виноват, тогда сюда и только сюда.
До среды.


MU   (2005-03-07 16:39:00) [5]

возьмите новый проект с TreeView и проверьте
или свой старый.


ShimON   (2005-03-07 16:10:00) [6]

И люди, которые за ней следят...


malamba   (2005-03-07 16:05:00) [7]

Гм, получится разве что в среду - он остался на работе, а домашняя копия старая.

Если не удасться нарыть это сообщени, пущу новое.
А может быть сразу в мыло, поскольку в этой теме остались только я да Вы.


MU   (2005-03-07 15:47:00) [8]

выложите кусок из DFM (TreeView) весь


malamba   (2005-03-07 15:39:00) [9]

М-м-м, странно.
То есть у Вас несколько узлов уровня 0, у каждого узла 0 - по нескольку узлов уровня 1, и так несколько раз.
И при закрытых узлах уровня 0 GetNext переходит по всем без исключения узлам, независимо от уровня?

Тогда какие настройки treeView ?


MU   (2005-03-06 21:16:00) [10]

у меня (D6) ваш код рааботает


malamba   (2005-03-06 19:04:00) [11]

MyTreeView.Items.GetFirstNode;

Разумеется, Items - я писал по памяти. Главное - смысл: получаю первый узел, а затем каждый последующий проверяю на соотвествие.
Но GetNext и не проходит.


MU   (2005-03-06 18:32:00) [12]

что-то подозрительный код
кто такой MyTreeView?
если это TTreeView, то у него не  MyTreeView.GetFirstNode;
а есть
 MyTreeView.Items.GetFirstNode;


malamba   (2005-03-06 18:17:00) [13]

Ольга, только не это.
На больших списках это жутко тормозит.

Показываю:
tmpNod := MyTreeView.GetFirstNode;
Searching := true;
while (Searching) and (tmpNod <> nil) do
begin
 if tmpNod.text = SearchTarget then
 begin
   Searching := False;
   MyTreeView.Selected := tmpNod;
   MyTreeView.SetFocus;
 end
 else
 begin
   tmpNod := tmpNod.GetNext
 end;
end;


Ольга   (2005-03-06 14:59:00) [14]

for i:=0 to TreeView.Items.Count-1


MU   (2005-03-06 12:49:00) [15]

покажите код


Наверх

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