Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Свой TTreeView   Найти похожие ветки 

 
Profi ©   (2005-01-24 03:05) [0]

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


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

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


 
jack128 ©   (2005-01-24 09:05) [2]

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


 
Style ©   (2005-01-24 10:40) [3]


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


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


 
Profi ©   (2005-01-24 14:46) [4]

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


 
Profi ©   (2005-01-24 14:56) [5]

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


 
P.N.P. ©   (2005-01-24 15:50) [6]

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


 
GuAV ©   (2005-01-24 16:23) [7]

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

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


 
jack128 ©   (2005-01-24 19:55) [8]

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


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


 
Profi ©   (2005-01-24 20:07) [9]

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


 
SergP ©   (2005-01-24 20:18) [10]


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


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


 
jack128 ©   (2005-01-24 20:44) [11]

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

можно. см [2]


 
jack128 ©   (2005-01-24 20:46) [12]

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


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


>  [12] jack128


OnCreateNodeClass

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


 
Style ©   (2005-01-25 12:02) [14]


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



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
6-1100956805
XProger
2004-11-20 16:20
2005.02.06
идентификация в IRC


1-1106651082
GanibalLector
2005-01-25 14:04
2005.02.06
ООП


9-1099511911
Jack
2004-11-03 22:58
2005.02.06
GLScene, Как определить пересечение 2-х объектов ?


1-1106293071
newver
2005-01-21 10:37
2005.02.06
JPEG Error #42


14-1106127463
syte_ser78
2005-01-19 12:37
2005.02.06
Обьясните о правильном завершении работы с БД