Delphi. Иерархические данные. DBTreeView своими руками. Чекбоксы в отдельном потоке

32

Решил добавить многопоточности в дерево. Cтолкнулся с тем, что при большом количестве потомков у узла, больше 500, начинаются  тормоза с проставлением галочек у всех потомков. Я запрограммировал так, что при нажатии на узел родителя, если у него есть узлы дети, – галочки у них у всех проставляются либо снимаются.

Создал отдельный юнит для потомков New > ThreadObject

В интерфейсной части 4 основных метода, отвечающих за логику и запись в базу “чекнутости” узлов.

Connect

ListParentAndAllChildren

Данная процедура рекурсивно собирает ID узла родителя и всех его потомков до последнего

CheckListedInDB – это запись из собранного списка в базу

UncheckListedInDB. Снятие галочек в базе

Эта процедура немного сложнее потому что добавлена логика по родителям. Если снимаем галочку у потомка, то снимается у всех родителей до последнего.

Вспомогательная функция – поиск родителя узла

Работа с деревом. Интеграция методов

Execute – основной метод потока

Вызов потока в главном модуле

 

This entry was posted in Delphi, Без рубрики, Деревья. Bookmark the permalink.