Главная страница
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.046 c
6-1137063115
HITMAN
2006-01-12 13:51
2006.04.23
HTTP


2-1144566772
hgd
2006-04-09 11:12
2006.04.23
Graphics 32


2-1144379306
031178
2006-04-07 07:08
2006.04.23
Delphi + Access


4-1138703879
bvn123
2006-01-31 13:37
2006.04.23
COM-порт, как вставить обработчик события onRxChar в программу?


1-1142418502
MegaVolt
2006-03-15 13:28
2006.04.23
Как сдвинуть данные в потоке?