Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

Добавление новых членов класса в TTreeView   Найти похожие ветки 

 
Sergg   (2006-03-15 18:13) [0]

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

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

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

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


 
Джо ©   (2006-03-15 18:18) [1]

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

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


 
Джо ©   (2006-03-15 18:20) [2]

type

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

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


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

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


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


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

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


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

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

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


 
Eraser ©   (2006-03-16 01:11) [6]


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

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


 
TStas ©   (2006-03-16 11:39) [7]

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



Страницы: 1 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
15-1143906227
ArtemESC
2006-04-01 19:43
2006.04.23
Вопросы по PHP


2-1144755963
elfebet
2006-04-11 15:46
2006.04.23
Как добавить в exe иконку


1-1142602507
shart
2006-03-17 16:35
2006.04.23
Access Violation при открытии файла


2-1144747164
pavel_guzhanov
2006-04-11 13:19
2006.04.23
Как можно поменять местами строки в листбоксе?


9-1128061133
КиТаЯц
2005-09-30 10:18
2006.04.23
Quark with GLScene using OpenBSP (есть кто шарит в Quark?)