![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Sheleh |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
Здравствуйте, помогите пожалуйста визуализировать линейную структуру Objects: array of Tobjects;:
В этой структуре иерархия объектов задается полями ID (собственный индекс) и ParentID (индекс родителя, которому принадлежит объект). Например:
На данный момент я заполняю VT по примеру обычным списком без иерархии
А как при заполнении зная индекс родителя ParentID сфокусировать родительский node по ID, что бы вставить от него Child Node. Надеюсь я ясно выразился ) За ранее спасибо! |
||||||
|
|||||||
cat512 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Пожалуйста, заранее.
Абсолютно не ясно. ![]() |
||||
|
|||||
Sheleh |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
![]() Ладно, попробую еще раз по порядку. Есть массив записей - Objects: array of Tobjects; Запись содержит текстовые поля: Tobjects = record ID, ParentID, Name, Num, Time: string; с примерно следующим содержанием: 1;0;Radius;R001;40648.1033536806 2;1;Tr;0116;40648.5782788079 3;1;Tr;0000;40648.5796839699 4;3;Dev;C;40648.5796839699 5;3;Dev;1;40648.5764067014 6;5;Sh;1;40648.5733965394 7;1;Tr;0091;40648.5737310995 Казалось бы простой масиив строк, но здесь есть ирархия. Каждая запись имеет собственный ID и ParentID - это ID родителя, к которому она относится. Для наглядности вот те же самые данные в древовидной форме.
как это можно древовидно отобразить в VT? |
||||
|
|||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Предлагаю сделать парсер с загрузкой данных в объектную структуру, а затем уже сделать отображение структуры в VT - как два байта переслать.
Хотя конечно можно и сразу в VT грузить. Примерный алгоритм: 1. Читаем запись, разбираем поля, смотрим ParentID, 2. ищем нод в дереве с ID=ParentID 3. Если нашли, то добавляем ему ребенка с данными из п.1 4. Если не нашли, то или пропускаем, или добавляем в корень. Но лучше сделать загрузку объектной модели, которую затем отражать в VT используя все его прелести с OnInitNode/OnInitChildNodes -------------------- There are always someone smarter than you... |
|||
|
||||
Sheleh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
MetalFan, я в этом новичок, в какую именно объектную структуру (TObjects?) можно это загрузить, и какие это даст плюсы, кроме простоты отображения в VT.
Плюс моей структуры, как мне кажется, это простота доступа к каждому объекту по его ID в независимости в корне объект, или глубокой вложенности, безо всяких рекурсивных поисков. Да и вложенность в моем случае нужна больше для наглядности при отображении, в программе же это должно выглядеть как список объектов.
2. ищем нод в дереве с ID=ParentID - а в дереве ли мы ищем? Как искать в дереве VT, если в нем только поинтеры, там же нет ID? Перекурил всю статью, но так и не нашел, где в VT хранятся ноды, и как к ним обращаться по индексу. Это сообщение отредактировал(а) Sheleh - 23.4.2011, 21:16 |
|||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Эта задача формулируется просто - "Загрузить древовидную структуру данных в Тривью".
Реализуется она с помощью алгоритма динамически расширяемого дерева. Строится рекур. функия типа
Ну а после, уже можно оптимизировать. Надеюсь, как адаптировать код к VirtualTreeView разберёшься сам Это сообщение отредактировал(а) cat512 - 26.4.2011, 00:20 |
|||
|
||||
Sheleh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 21.4.2011 Репутация: нет Всего: нет |
Всем спасибо, в итоге получилось следующее (код ниже). Для удобства реализации я добавил в свою запись два вара - ссылка на свой нод в VT, и таг, по которому определяется, была ли запись уже отображена в дереве.
Из недостатков - код зацикливается, если у объекта нет родителя. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |