Форум: "Основная";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизДобавление новых членов класса в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c