Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.014 c
1-1142616992
философ
2006-03-17 20:36
2006.04.23
Автоматическое переключение языка клавиатуры


8-1132830908
Noby
2005-11-24 14:15
2006.04.23
как заставить TMediaPlayer воспроизводит из


2-1144333249
seleman
2006-04-06 18:20
2006.04.23
Кнопки


2-1144232901
SveT
2006-04-05 14:28
2006.04.23
Относительный путь..


2-1144595174
Radagast
2006-04-09 19:06
2006.04.23
Помогите, пожалуйста, разобраться с объектами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский