|
Вопрос # 3 801/ вопрос открыт / |
|
Здравствуйте!
Я невичёк, хотел попросить у вас совета)
Пишу программу в которой должно быть два TreeView. Первое древо что то вроде каталога, при выборе его элементов структура и содержание 2го древа должны обновляться. А элементы 2го древа можно добавлять, удалять, переименовывать. Подскажите, как лучше это реализовать? Как осуществлять сохранение и загрузку структур 2го древа. (Если можно, то с примерами)
 |
Вопрос задал: 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™ (статус: Доктор наук), 23 февраля 2010, 14:18 [#1]:
Если ты новичёк, разобраться с этим тебе будет сложновато, по себе знаю. Предупреждаю: придётся написать одного или нескольких потомков от TTreeNode, чтобы хранить древовидную информацию, привязанную к ним.
Ты морально готов к этому?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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™ (статус: Доктор наук), 23 февраля 2010, 15:38 [#3]:
Выкинь всё, что есть и начни сначала. Пиши свой класс для хранения древовидной информации. Про массивы забудь: это вещи линейные, они тут не нужны.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Azg (статус: Посетитель), 23 февраля 2010, 15:46 [#4]:
Дело в том что я новичёк, мои познания базовые(( Понятия не имею как писать свой класс... Поэтому то и спрашиваю тут совета... Всё что мне сейчас нужно это загружать деревья (попытаюсь с xml) и к каждому элементу привязать кое какие данные (пару чисел и строчек)...
|
23 февраля 2010, 16:05: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А. Причина: TreeView - это компонент 
|
min@y™ (статус: Доктор наук), 24 февраля 2010, 10:52 [#5]:
Цитата (Azg):
попытаюсь с xml
Это хорошая идея. Сам использую TECXMLParser, рекомендую: очень простой в использовании и с исходниками. Похоже, это то, что надо.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Azg (статус: Посетитель), 24 февраля 2010, 11:50 [#6]:
min@y™:
Спасибо за совет, попробую.)
|
|
min@y™ (статус: Доктор наук), 24 февраля 2010, 16:24 [#7]:
Цитата (Azg):
Спасибо за совет, попробую.
О результатах не забудь доложить.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|