Форум: "Компоненты";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизРасширенный 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c