Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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
1-1150365320
Baiji
2006-06-15 13:55
2006.07.30
Освободить файл


2-1152625057
AlexanderMS
2006-07-11 17:37
2006.07.30
Добавить новый подпункт в пункт меню ActionMainMenuBar.


15-1151669678
MsGuns
2006-06-30 16:14
2006.07.30
Сожмем кулаки за Украину ?


15-1151481375
IMHO
2006-06-28 11:56
2006.07.30
Слово об OpenOffice


6-1142577170
Dust
2006-03-17 09:32
2006.07.30
Ничего не могу понять.... :(





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский