Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2010, 06:07   #1
lifead
Новичок
Джуниор
 
Регистрация: 14.03.2010
Сообщений: 1
По умолчанию Использование объектов в TreeView, как?

Всем доброго времени суток!
Не могу найти в интернете и в учебной литературе нормального описания работы компоненты TreeView с объектами. Единственное что нашел так это то что надо использовать указатели, а как эти указатели взять от отбъекта не нашел, и как из TreeView используя привязанные указатели обратиться потом к объекту?
В частности задача вот какая: есть 5 кнопок типа TButton необходимо в TreeView поместить 5 элементок с указанием на эти кнопки и при нажатии на какой либо из элементов необходимо чтобы Capion привязанной кнопки менялся и выполнялось действие которое привязано к кнопке. Как это можно реализовать?
lifead вне форума Ответить с цитированием
Старый 14.03.2010, 10:15   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

У каждой ветки (TTreeNode) дерева есть свойство Data. Просто указатель.
Используя преобразование типов Delphi можно работать с объектами.
Например, запись указателя на какой либо объект делается так:
Код:
  TN := TreeView1.Items.AddChildObject(nil, 'Главная ветка', Button1); //ссылка указывается просто как имя объекта
  TN := TreeView1.Items.AddChildObject(TN, 'Подчиненная ветка', Button2);
//где var TN : TTreeNode
Чтобы "взять" ссылку на сохраненный объект необходимо преобразовать ее к типу объекта.
К примеру, как можно заменить надпись на кнопке, ссылка на которую есть в ветке дерева.
В обработчике события OnClick TreeView (это событие взято только для примера):
Код:
procedure TForm1.TreeView1Click(Sender: TObject);
begin
  if (TreeView1.Selected <> nil) and //проверяем: выбрана ли хотя бы одна ветка
     (TreeView1.Selected.Data <> nil) and //есть ли в выбранной ветке ссылка на объект 
     (TObject(TreeView1.Selected.Data) is TButton) //объект тот, который нужен?
  then begin
    //преобразование позволяет обращаться к свойствам (методам и событиям) объекта
    TButton(TreeView1.Selected.Data).Caption := TreeView1.Selected.Text
  end;
end;
Скандербег вне форума Ответить с цитированием
Старый 20.04.2010, 13:25   #3
PeaceDuke
 
Регистрация: 20.04.2010
Сообщений: 8
По умолчанию

Скажите возможно ли..созданному узлу присвоить уникальный идентификатор ("например какое нибудь число") обращаться к нему по этому идентификатору
PeaceDuke вне форума Ответить с цитированием
Старый 20.04.2010, 13:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А у них итак есть уникальный номер - это их индекс
т.е. TreeView1.Item[Вот тут номер по порядку]
Причем если не ошибаюсь тут и подветки учитываются.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.04.2010, 16:35   #5
PeaceDuke
 
Регистрация: 20.04.2010
Сообщений: 8
По умолчанию

Нет... этот индекс изменяется как только добавить новый узел....а я имею ввиду возможно их как-нибудь инициализировать
Чтоб в последствии обращаться только к этому узлу

И ещё один вопрос.. возможно ли что узел содержал нетолько стинг который видит пользователь?

Последний раз редактировалось Stilet; 20.04.2010 в 16:50.
PeaceDuke вне форума Ответить с цитированием
Старый 20.04.2010, 16:52   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Чтоб в последствии обращаться только к этому узлу

И ещё один вопрос.. возможно ли что узел содержал нетолько стинг который видит пользователь?
Хм... Я делаю так - описываю некий класс с полями индекса, массива строк.
После создаю его экземпляр и помещаю в Data ветки. Таким образом у меня дерево расширяется за счет того обьекта в Data новыми возможностями. Смысл ясен?
Насчет нескольких строк визуально, можно, но нужно самостоятельно прописать процедуру отрисовки (чесно говоря это геморр)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2010, 09:21   #7
PeaceDuke
 
Регистрация: 20.04.2010
Сообщений: 8
По умолчанию

Я понял.. спасибо))
PeaceDuke вне форума Ответить с цитированием
Старый 22.04.2010, 06:04   #8
PeaceDuke
 
Регистрация: 20.04.2010
Сообщений: 8
По умолчанию

Подскажите люди добрые как Когда два тривью на форме определить для какждого ветку на которой находимся...
TreeView1->Selected -не проходит
PeaceDuke вне форума Ответить с цитированием
Старый 22.04.2010, 08:07   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не понял... Ты нормально могешь обьяснить?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.04.2010, 12:40   #10
PeaceDuke
 
Регистрация: 20.04.2010
Сообщений: 8
По умолчанию

В общем у меня два дерева..
выбираешь ветку в одном и во втором и уже на основании Date этих веток делаем запрос к базе данных
Как определить какие ветки были выбраны?)
PeaceDuke вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование в delphi com объектов Anekdot Помощь студентам 0 18.06.2009 19:54
Использование компонента TreeView girz БД в Delphi 8 01.06.2009 10:28
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18
Как рисовать на Canvas объектов Jean-Esther Общие вопросы Delphi 2 02.03.2009 02:57
Как осуществить запоминание объектов? Djem1991 Общие вопросы Delphi 4 06.01.2009 14:09