Delphi. Иерархические данные. DBTreeView своими руками. Удаляем несколько узлов с помощью Checkboxes

В данной статье посмотрим на алгоритм удаления при помощи Checkboxes. Суть такая же, при удалении узла нужно удалить всех его детей. Но реализация немного другая, отличная от той, где мы удаляли через Selection. Алгоритм, прямо скажу, не быстрый, но рабочий. Вообще, всё что на TreeView ограничивается несколькими сотнями узлов – дальше начинает критично подтормаживать, при переподчинении узлов, удалении и так далее.

10

 

11

Идея алгоритма в том, что мы идем с конца в начало и удаляем узлы. Если в узлах есть дети, то тоже их удаляем. Алгоритм можно немного ускорить, если подсчет галочек вести в момент непосредственного нажатия на узел. При выставлении галочки – абсолютный индекс узла добавляется, при удалении удаляется, но тут надо следить за этими индексами, если допустим переместили элемент, удалили другой – те моменты, когда абсолютные индексы меняются. Поэтому я пошел самым простым, может быть не самым эффективным путем – собираю информацию об отмеченных объектах непосредственно перед удалением.

Реализация алгоритма выглядит следующим образом

 

by Stanislav_Panteleev