Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Свой TTreeView


Profi ©   (2005-01-24 03:05:00) 

Народ, я чего-то не пойму, как добавить к TTreeNode еще один параметр? Мне надо что бы в tTreeNode еще хранился TstringList! Реально ли это сделать?


Style   (2005-01-25 12:02:00) [1]


> А. Собственно эта ветка переместилась в Основную.. Тогда
> отвечу так:
> Можно.  В старших версиях дельфей, AFAIK, есть событие OnCreateNode
> :-)


Да в 5-ке не получится :(
Я почему-то думал, что TTreeNodes это TCollection, в котором при создании можно указать класс его элементов.

Наверное лучше будет инкапсулировать две функции в класс самого наследника дерева.

function GetStringList(Node: TTreeNode): TStringList;
begin
 result := TStringList(Node.Data);
end;

procedure PutStringList(Node: TTreeNode; List: TStringList);
begin
 Node.Data := @List;
end;

Но тогда надо будет обязать себя не работать с Node.Data :)))


Гаврила   (2005-01-24 22:21:00) [2]


>  [12] jack128


OnCreateNode Class

procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView;
 var NodeClass: TTreeNodeClass);
begin
 NodeClass:=TMyTreeNode;
end;


jack128   (2005-01-24 20:46:00) [3]

А. Собственно эта ветка переместилась в Основную.. Тогда отвечу так:
Можно.  В старших версиях дельфей, AFAIK, есть событие OnCreateNode :-)


jack128   (2005-01-24 20:44:00) [4]

SergP ©   (24.01.05 20:18) [10]
А нельзя самому создавать новую ноду, а потом подсовывать ее тривьюю?

можно. см [2]


SergP   (2005-01-24 20:18:00) [5]


> Как TreeView заставить создовать наш новый  TMyTreeNodes
> ? Для дельфи5 только ковырянием в исходниках VCL. Как в
> старших версиях - не знаю..


А нельзя самому создавать новую ноду, а потом подсовывать ее тривьюю?


Profi   (2005-01-24 20:07:00) [6]

Юрий Зотов ©   (24.01.05 8:45) [1]
P.N.P. ©   (24.01.05 15:50) [6]
GuAV ©   (24.01.05 16:23) [7]
Спасибо большое! Все ок! Теперь только осталось все это в файл запихнуть для сохранения и загрузки и все.


jack128   (2005-01-24 19:55:00) [7]

Style ©   (24.01.05 10:40) [3]
Почему?? Если как-раз создать наследника, то можно добавить свое свойство TStringList, и приведение типа реализовать только
в его методах read, write...


Это get и set методы класса TTreeNodes.  То есть тебе нужно создать наследника TTreeNodes и переобъявить свойство Item чтобы оно возвращало TMyTreeNode. Оки, а теперь вопрос знатокам - Как TreeView заставить создовать наш новый  TMyTreeNodes ? Для дельфи5 только ковырянием в исходниках VCL. Как в старших версиях - не знаю..


GuAV   (2005-01-24 16:23:00) [8]

Profi ©   (24.01.05 14:46) [4]
Нет. Я так понимаю отдельной переменной для каждого Node нет, да ? так @sl будет указывать на текущее значение sl, что в случае локальной переменной можетбыть даже совсем не TStringList.

любая переменная типа класс по сути указатель на экземпляр класса. И значение этого указателя уже соотвествует экземпляру класса в отличие от указателя на него.
Т.е. TreeNode.data:=sl;без @ и тогда "доставать" как в [6].


P.N.P.   (2005-01-24 15:50:00) [9]

>Profi ©   (24.01.05 14:56) [5]
TStringList(TTreeNode.Data)


Profi   (2005-01-24 14:56:00) [10]

Profi ©   (24.01.05 14:46) [4]
Ок, сохранять он сохраняет, а как достать-то?


Profi   (2005-01-24 14:46:00) [11]

Юрий Зотов ©   (24.01.05 8:45) [1]
Это-то я знаю, но там тип Pointer. В общем, если sl:TStringList, то TTreeNode.date:=@sl;я так понимаю?


Style   (2005-01-24 10:40:00) [12]


> К сожелению по крайней мере для Delphi5 тебе каждый раз
> придется полозоваться приведением типа для того чтобы добраться
> до нового свойства


Почему?? Если как-раз создать наследника, то можно добавить свое свойство TStringList, и приведение типа реализовать только
в его методах read, write...


jack128   (2005-01-24 09:05:00) [13]

1)создать наследника TTreeNode и реализовать в нем свое свойство
2) Перекрыть TCustomTreeView.CreateNode и создавать в нем узлы своего типа.
К сожелению по крайней мере для Delphi5 тебе каждый раз придется полозоватьься приведением типа для того чтобы добраться до нового свойства


Юрий Зотов   (2005-01-24 08:45:00) [14]

Реально, причем для этого даже и не надо писать свой компонент. Посмотрите свойство TTreeNode.Data - оно специально предназначено для таких вещей.


Наверх

Титульная страница Поиск, карта сайта Написать письмо