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

Вниз

Расширенный TTreeView   Найти похожие ветки 

 
cp.Silver ©   (2006-01-06 18:19) [0]

Доброго времени суток! Пишу свой компонент на основе TTreeView. Но возникла одна проблема. Мне нужно, чтобы в каждом TTreeNode были два integer-свойства (оба read/write): Tag и StateTag. Никак не получается добраться до TTreeNode.
Подскажите, плз. как решить проблему. Если есть пример - буду очень благодарен.


 
jack128 ©   (2006-01-06 22:13) [1]

тебе нужно перекрыть метод
function TCustomTreeView.CreateNode: TTreeNode; virtual; чтобы он создавал узлы нужного типа


 
cp.Silver ©   (2006-01-06 23:45) [2]

>>2jack128

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


 
Gero ©   (2006-01-07 00:37) [3]

Попробуй так:

До объявления класса пишешь:

TTreeNode = class(ComCtrls.TTreeNode)
 // все, что потребуется
end;

Должно работать.


 
jack128 ©   (2006-01-07 04:12) [4]

cp.Silver ©   (06.01.06 23:45) [2]
использую в качестве предка TTreeView, а не TCustomTreeView?

нет, не имеет.
Gero ©   (07.01.06 0:37) [3]
TTreeNode = class(ComCtrls.TTreeNode)

Гм. Зачем одноименные классы?
Gero ©   (07.01.06 0:37) [3]
Должно работать.

без переопределения CreateNode? Наврядли


 
Gero ©   (2006-01-07 04:16) [5]

> Гм. Зачем одноименные классы?

Чтобы расширить возможности непосредственно TTreeNode.

> без переопределения CreateNode? Наврядли

Угу, без.


 
Юрий Зотов ©   (2006-01-07 13:49) [6]

> Gero ©   (07.01.06 04:16) [5]

Зачем вносить путаницу и тем самым закладывать под самого себя мину замедленного действия? К тому же, при существовании нормального, специально для того и сделанного механизма.

> cp.Silver ©   (06.01.06 18:19)

1. Пишете свой потомок TTreeNode и вводите в него все, что нужно.
2. Пишете свой потомок TTreeView (или TCustomTreeView)  и в нем перекрываете CreateNode.
3. Доступ к новым свойствам - через приведение типа.

Можно обойтись  и без п. 2, если в программе написать обработчик события OnCreateNodeClass.


 
cp.Silver ©   (2006-01-07 15:55) [7]

Всем спасибо, попробую


 
jack128 ©   (2006-01-07 16:18) [8]

Gero ©   (07.01.06 4:16) [5]
Угу, без.

пример можно?


 
Gero ©   (2006-01-07 17:28) [9]

> Юрий Зотов ©   (07.01.06 13:49)

Я не настаиваю и предложил всего лишь один из возможных вариантов решения.

> пример можно?

Я делал такое с TMenuItem. Было что-то вроде этого:

type
 TMenuItem = class(Menus.TMenuItem)
   procedure XXX;
 end;

 TXMenu = class(TMainMenu);

implementation

procedure TMenuItem.XXX;
begin
 // code
end;

---------

Затем подключаю этот модуль куда угодно и вызываю:

var
 Menu: TXMenu;
begin
 Menu.Items[0].XXX;
end;

Думаю, что и для TTreeNode тоже должно работать.


 
jack128 ©   (2006-01-08 00:19) [10]

Gero ©   (07.01.06 17:28) [9]
procedure XXX;

у тебя здесь метод. Причем статический. Человеку же нужны свойства
cp.Silver ©   (06.01.06 18:19)
два integer-свойства (оба read/write): Tag и StateTag.


Как ты понимаешь, с очень высокой вероятностью эти свойста потребуют соответсвующих полей со всми втекающими и вытекающими..


 
Gero ©   (2006-01-08 18:05) [11]

> jack128 ©   (08.01.06 00:19)

Да, согласен, я напутал, такой метод здесь работать не будет.



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
2-1152271204
Crazy monkey
2006-07-07 15:20
2006.07.30
2 Вопроса по TreeView


5-1135933137
FrykT
2005-12-30 11:58
2006.07.30
Канва, текст, и... мышка


2-1152480645
PhillipJFry
2006-07-10 01:30
2006.07.30
Помогите с запросом!!


2-1152326876
Der Nechk@ssoff
2006-07-08 06:47
2006.07.30
кол-во дней между числами


2-1151903792
maxistent
2006-07-03 09:16
2006.07.30
DOS-палитра