Какой лучший алгоритм Delphi для отображения дерева для отображения существующей иерархии объектов - PullRequest
0 голосов
/ 08 мая 2011

Звучит очень просто, но это как лук - много слоев при чистке. У меня есть иерархия моих собственных классов объектов - немного похоже на компоненты формы, в том смысле, что любой из них может иметь дочерних и родительских элементов. Вверху находится корневой объект. Другой код управляет этой иерархией, и возможно, что ветви или листья могут быть созданы, удалены или переименованы в любое время. Я хотел бы иметь древовидное представление (какое-то, возможно, виртуальное), которое обеспечивает представление этой иерархии таким образом, чтобы можно было иметь несколько из этих древовидных представлений, каждое из которых рисует себя из иерархии объектов по мере необходимости. *

У меня уже есть решение, использующее Delphi TTreeView, но оно опирается на итерацию по иерархии, когда поднимается флаг «изменен», и перестраивание ветвей древовидного представления, которые изменились. Это медленно (у меня может быть более 1000 объектов), и мне нужен алгоритм, который управляет одним изменением вида дерева для вставки или удаления одного объекта.

Возможно ли это?

1 Ответ

1 голос
/ 08 мая 2011

Конечно, вы можете обнаружить, что объект был вставлен или удален, и внести необходимые изменения.

Например, для удаления найдите узел, связанный с удаленным объектом, а затем удалите его.Для вставки найдите объект, связанный с родителем, а затем вставьте новый узел в нужное место.

Если при просмотре узла, связанного с объектом, возникают проблемы с производительностью, то вы можетеиспользуй словарь.

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

...