Delphi не визуальная реализация TTree - PullRequest
3 голосов
/ 03 декабря 2009

Я ищу реализацию невизуального постоянного дерева (TStringTree). Если кто-то знает, что это хорошо, пожалуйста, дайте мне знать.

Спасибо.

Ответы [ 5 ]

6 голосов
/ 03 декабря 2009

Вы найдете гибкую невизуальную древовидную структуру в библиотеке DI Containers (коммерческая). Тем не менее, как уже отмечалось выше, на самом деле довольно легко выполнить свою собственную работу, добавив только те функции, которые вам нужны.

Вы можете использовать только два базовых объекта: TNode и TNodeList (например, потомок TObjectList). Как минимум, TNode требуется только три члена: ваши строковые данные, ссылка на его родительский узел (nil, если узел является корневым) и TNodeList, который является списком его дочерних узлов. Остается (несколько утомительная) реализация различных сопутствующих методов, таких как Add (), Delete (), IndexOf (), MoveTo (), GetFirstChild (), GetNext () и т. Д. Базовое дерево должно быть меньше единицы -nighter.

2 голосов
/ 04 декабря 2009

И, конечно же, все еще есть классная DECAL (ранее Rosetta), попытка создать своего рода STL с использованием интерфейсов и вариантов.

http://sourceforge.net/projects/decal/

Больше для людей, которые гибкость в скорости, хотя. Базовая древовидная структура - красно-черный ирк.

2 голосов
/ 03 декабря 2009

Что за дерево? B-дерево? Splay дерево? Красно-черное дерево? Это все распространенные типы древовидных алгоритмов.

Возможно, вы захотите взглянуть на книгу Джулиана Бакнолла "1003 * Томы Дельфи: структуры данных и алгоритмы У этого есть все виды реализаций дерева с полным исходным кодом Delphi; Вы можете легко адаптировать любой из них для работы со строками.

1 голос
/ 03 декабря 2009

Вы можете просто использовать tStringList и добавлять объекты, которые являются другими tStringLists ... сырыми, но это работает, если ваши данные могут быть представлены только как строковые данные.

Child := tStringlist.create;
ParentList.AddObject('Child',Child);

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

1 голос
/ 03 декабря 2009

Почему бы просто не использовать документ XML DOM?

Это может быть излишним для действительно тривиального строкового дерева, но не будет слишком обременительным для использования для этой цели и имеет преимущество, заключающееся в возможности размещения практически любого расширения для строкового дерева (для хранения дополнительных каждая строка в дереве - как атрибуты и т. д.) в случае необходимости.

По моему опыту, часто то, что начинается как тривиальная потребность, может быстро превзойти первоначальное или ожидаемое требование. :)

Если вас беспокоит «издержки» реализации XML на основе COM и оболочки VCL вокруг нее, вы можете заглянуть в TNativeXML

...