![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавление новых членов класса в 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.