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