Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 801

/ вопрос открыт /

Здравствуйте!
Я невичёк, хотел попросить у вас совета)
Пишу программу в которой должно быть два TreeView. Первое древо что то вроде каталога, при выборе его элементов структура и содержание 2го древа должны обновляться. А элементы 2го древа можно добавлять, удалять, переименовывать. Подскажите, как лучше это реализовать? Как осуществлять сохранение и загрузку структур 2го древа. (Если можно, то с примерами)

Azg Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Azg (статус: Посетитель)
Вопрос отправлен: 23 февраля 2010, 14:09
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Azg!
Наверно удивитесь, но TreeView умеет сохранять себя и загружать с текстового файла. методы SaveToFile и LoadFromFile.
Здесь http://www.delphisources.ru/pages/faq/base/fast_treeview.html есть доработанный компонент TreeView, который должен выполнять эти процедуры значительно быстрее.

Но если хочется сохранять более полную информацию (о иконках к примеру), то лучше воспользоваться xml. Вот здесь http://delphi.about.com/library/weekly/aa101904a.htm есть пример загрузки и сохранения.

Здесь http://pblog.ru/lab/?tag=treeview есть подборка материалов на тему TreeView, думаю, там можно найти хорошие заготовки кода.

Также в будущем думаю будет неплохо посмотреть на Virtual TreeView. Вот http://forum.vingrad.ru/forum/topic-97620.html хорошая статья по нем.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 23 февраля 2010, 14:21
Оценка за ответ: 5

Комментарий к оценке: Большое спасибо, буду изучать)

Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 24 февраля 2010, 16:24; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 23 февраля 2010, 14:18 [#1]:

Если ты новичёк, разобраться с этим тебе будет сложновато, по себе знаю. Предупреждаю: придётся написать одного или нескольких потомков от TTreeNode, чтобы хранить древовидную информацию, привязанную к ним.
Ты морально готов к этому?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Azg

Azg (статус: Посетитель), 23 февраля 2010, 15:21 [#2]:

min@y™:

В общем то я делал нечто подобное, по методу из темы https://expert.delphi-int.ru/question/934/

Мне нужно было привязать к каждому из элементов 2го древа по несколько чисел... При двойном клике по элементу вылетает окно настроек и сохранённые числа обозначают индексы выбранных названий)

begin
   Form4.ShowModal;
   If Form4.ModalResult = 1 then
    begin
    TreeView2.Items.AddChild(TreeView2.Items.Item[I],T);
    TMyNode(TreeView2.Items.Item[I]).FOpt.FI:= Form4.ComboBox1.ItemIndex;
    TMyNode(TreeView2.Items.Item[I]).FOpt.SI:= Form4.ComboBox2.ItemIndex;

Всё работало (хотя я не очень то понял принцип работы TMyNode :(), но это было на 1м древе... а сейчас нужно увеличить кол-во деревьев... что делать когда деревьев много?..
Была идея сделать массив, примерно так:
begin
   Form4.ShowModal;
   If Form4.ModalResult = 1 then
    begin
    TreeView2.Items.AddChild(TreeView2.Items.Item[I],T);
    TMyNode(TreeView2.Items.Item[I]).FOpt.Nam[j].FI:= Form4.ComboBox1.ItemIndex;
    TMyNode(TreeView2.Items.Item[I]).FOpt.Nam[j].SI:= Form4.ComboBox2.ItemIndex;
Где j индекс выбранного элемента 1го древа. Но что то не получилось. К тому же индексы 1го древа так же могу меняться, так что тут я в тупике((
min@y™

min@y™ (статус: Доктор наук), 23 февраля 2010, 15:38 [#3]:

Выкинь всё, что есть и начни сначала. Пиши свой класс для хранения древовидной информации. Про массивы забудь: это вещи линейные, они тут не нужны.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Azg

Azg (статус: Посетитель), 23 февраля 2010, 15:46 [#4]:

Дело в том что я новичёк, мои познания базовые(( Понятия не имею как писать свой класс... Поэтому то и спрашиваю тут совета... Всё что мне сейчас нужно это загружать деревья (попытаюсь с xml) и к каждому элементу привязать кое какие данные (пару чисел и строчек)...

23 февраля 2010, 16:05: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А. Причина: TreeView - это компонент :-)

min@y™

min@y™ (статус: Доктор наук), 24 февраля 2010, 10:52 [#5]:

Цитата (Azg):

попытаюсь с xml

Это хорошая идея. Сам использую TECXMLParser, рекомендую: очень простой в использовании и с исходниками. Похоже, это то, что надо.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Azg

Azg (статус: Посетитель), 24 февраля 2010, 11:50 [#6]:

min@y™:

Спасибо за совет, попробую.)
min@y™

min@y™ (статус: Доктор наук), 24 февраля 2010, 16:24 [#7]:

Цитата (Azg):

Спасибо за совет, попробую.

О результатах не забудь доложить.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:59
Выполнено за 0.02 сек.