powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Медленный VirtualTreeView (массовое переназначение родителей)
8 сообщений из 8, страница 1 из 1
Медленный VirtualTreeView (массовое переназначение родителей)
    #39558667
Кар-Кар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу скрывать родителя и все дочерние становятся прямым списком.
И обратно тоже:


Сделать прямым списком - быстро.
А вот обратно расфасовать по правильным родителям - долго.

Хотя я сохранил оригинального родителя:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
  TVirtualKind = (vkNode, vlLeaf);

type
  PVirtualData = ^TVirtualData;
  TVirtualData = record
    Top    : PVirtualNode;  //"бэкап" парента
    Kind   : TVirtualKind;
  end;

//Тут уже код перестройки дерева, либо с парентами либо без
var
Next : PVirtualNode;
Node : PVirtualNode;
begin
Tree.BeginUpdate;
Next := Tree.GetFirst;
while Assigned(Next) do
begin
  Node := Next;
  Next := Tree.GetNext(Next);
  with PVirtualData(Node.GetData)^ do
  case Kind of
  vkNode: Tree.IsVisible[Node] := vsNodes in FShow;
  vkLeaf:
    begin
      if vsNodes in FShow then
        Tree.NodeParent[Node] := Top else //PVirtualData(Node.GetData)^.Top
        Tree.NodeParent[Node] := Tree.RootNode;
    end;
  end;
end;
Tree.EndUpdate;
end;


~180 парентов с пока ещё ~70000 нодами вообщем, "возвращение" занимает 2-4 секунды. Возможно ускориться?
Там больше планируется...
...
Рейтинг: 0 / 0
Медленный VirtualTreeView (массовое переназначение родителей)
    #39558676
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кар-Кар,

ты данные не в дереве храни. И просто перестраивай дерево с нуля, и все.
И дочерние узлы подгружай лишь в момент их разворачивания.
...
Рейтинг: 0 / 0
Медленный VirtualTreeView (массовое переназначение родителей)
    #39558677
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...можешь даже два окна деревьев завести, одно под другим, и переключаться между ними.
...
Рейтинг: 0 / 0
Медленный VirtualTreeView (массовое переназначение родителей)
    #39558678
Кар-Кар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Данные там просто интерфейс и пара dword-ов в оригинале(чтобы знать как рисовать, многотиповые ноды), это малозначительно.
Перестройка вот с нуля - она сбивает всё, т.е. ноды снова закрыты станут, скроллбокс на нулевой позиции и т.п. Хотел избежать.

чччДИ дочерние узлы подгружай лишь в момент их разворачивания.
Это событие есть? Посмотрю. Может даже попробую паренты менять прям в OnGetText только, в FShow у меня есть флаги как подразумевается показ дерева.
...
Рейтинг: 0 / 0
Медленный VirtualTreeView (массовое переназначение родителей)
    #39558680
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кар-Кар, смотри потроха метода MoveTo. как минимум, попробуй развернуть обход дерева при перестройке
...
Рейтинг: 0 / 0
Медленный VirtualTreeView (массовое переназначение родителей)
    #39558681
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кар-Кар,
1. событие есть.
2. перед перестраиванием в парент-чилд запомни, какой нод был текущим, вычисли его парента и тоже запомни. С нуля построй парент-уровень, найди нужный парент-узел, распахни его. Сработает событие см.выше, подгрузятся чилды этого парента. Среди чилдов найди свой узел. Выполни скролл чилд-узла в облвсть видимости окна.
3. запоминать все развернутые узлы не надо, юзеры не оценят. Более того, мы в итоге сдели так, чтобы была развернута лишь одна парент-ветка, просие сразу сворачиваются. Впрочем, дело ваше.
...
Рейтинг: 0 / 0
Медленный VirtualTreeView (массовое переназначение родителей)
    #39558682
Кар-Кар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД...можешь даже два окна деревьев завести, одно под другим, и переключаться между ними.Вариант. Но пока не знаю, уровней планируется 4 или где-то так. Типа фильтр, в любой момент снимать галки и видеть скопом (в этот момент непервостепенно знать кто-кому принадлежит).
...
Рейтинг: 0 / 0
Медленный VirtualTreeView (массовое переназначение родителей)
    #39558902
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно иметь процедуру получения "пути" к корню от самого последнего листика (можно реализовать на уровне СУБД).
И процедуру позиционирования на листик по этому пути.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Медленный VirtualTreeView (массовое переназначение родителей)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]