Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавление новых членов класса в TTreeView [D7, WinXP]


Sergg ©   (2006-03-15 18:13:00) 

Уважаемые мастера!
Я хочу несколько расширить список атрибутов объектов TNode из TTreeView. Т.е. добавить несколько строковых переменных в объявлении класса TNode, чтобы кроме названия ветки объект нес еще кое-какую информацию. Например: название объекта TNode отображаемое в TTreeView описывает содержимое некоторого файла, а в добавленном атрибуте (скажем TNode.Path) хранится путь к этому файлу и по двойному щелчку на ветку открывается соответствующий файл.

Беда в том что я никогда ничего подобного не делал. И хотел бы услышать ваш совет:)

Я думаю делать так:
Скопировать отдельно файл ComCtrls.pas в папку проекта; обозвать его по-другому и включить в проект;
вычистить из ComCtrls.pas все не относящееся к TTreeView;
обозвать по другому TTreeView, скажем: TTreeViewMy;
добавить в объявление класса TNode нужные атрибуты;

Правильно ли это?:))


TStas   (2006-03-16 11:39:00) [1]

Я хранил структуру, которая была привязана к узлу Data - указатель на нее, а в структуре - указатель на Node Все отлично собиралось, разбиралось, сохранчлось и, главное, новые NOdы добавлдялись ИМХО чем писать потомка нода, пусть уж лучше висят не просто данные, а структура (запись). Во всяком случае проще отладить.


Eraser   (2006-03-16 01:11:00) [2]


> jack128 ©   (16.03.06 00:51) [5]

понятно... этот момент я не учёл.


jack128   (2006-03-16 00:51:00) [3]

Eraser ©   (16.03.06 0:45) [4]
и опять же есть третий вариант - запуздырить хелпер :)

хелпер не может содержать ДАННЫЕ. Только код. Соответственно про поля можешь забыть..


Eraser   (2006-03-16 00:45:00) [4]


> Гаврила ©   (15.03.06 23:34) [3]

и опять же есть третий вариант - запуздырить хелпер :)
но будет работать только в D2006.


Гаврила   (2006-03-15 23:34:00) [5]

Собственно, путей решения два
1. Как предлагает Джо
2. использовать свойство TTreeNode.Data для хранения доп информации, привязанной к узлу. Так как оно имеет тип Pointer, мы можем хранить тут свой объект, или укататель на структуру (Record)


Джо   (2006-03-15 18:20:00) [6]

type

 // твой "расширенный" класс-наследник TTreeNode
 TExtendedTreeNode = class (TTreeNode)
 public
   // добавь новые свойства и т.п.
 end;

// обработчик OnCreateNodeClass
procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView;
 var NodeClass: TTreeNodeClass);
begin
 // возвращай ссылку на свой класс
 NodeClass := TExtendedTreeNode;
end;


Джо   (2006-03-15 18:18:00) [7]

> Правильно ли это?:))

Нет :)
Смотри событие OnCreateNodeClass.


Наверх

Титульная страница Поиск, карта сайта Написать письмо