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

Вниз

Как перекрыть конструктор, если он не виртуальный?   Найти похожие ветки 

 
hex1287   (2007-02-12 12:46) [0]

1. Есть куча классов, все - наследники от TTreeNode.
2. Какой из классов создавать определяется в TTreeView.OnCreateNodeClass в зависимоти от некоторого признака.

необходимо уметь создавать всякие внутренние структуры для каждого из кучи классов, и хочется делать это в конструкторе. Но конструктор у TreeNode не виртуальный. Может можно его как-нить победить, чтобы код в TCustomTreeView.CreateNode:

Result := LClass.Create(Items);

вызывал конструктор наследника, а не TTreeNode?


 
Reindeer Moss Eater ©   (2007-02-12 12:49) [1]

Но конструктор у TreeNode не виртуальный. Может можно его как-нить победить, чтобы код в TCustomTreeView.CreateNode:

Result := LClass.Create(Items);

вызывал конструктор наследника, а не TTreeNode?


А как виртуальность конструктора могла бы помочь в создании экземпляра другого класса?


 
Плохиш ©   (2007-02-12 13:07) [2]


> hex1287   (12.02.07 12:46)  


function TCustomTreeView.CreateNode: TTreeNode;
var
 LClass: TTreeNodeClass;
begin
 LClass := TTreeNode;
 if Assigned(FOnCreateNodeClass) then
   FOnCreateNodeClass(Self, LClass);
 Result := LClass.Create(Items);
end;

Как думаешь, выделенная строка что делает?


 
hex1287   (2007-02-12 14:03) [3]


> Плохиш ©   (12.02.07 13:07) [2]
>  выделенная строка что делает?


Дык, я и говорю, что какой именно класс создавать определяется в TTreeView.OnCreateNodeClass.

Вот пример:



type
TMyClass1=class(TTreeNode)
...
end;

TMyClass2=class(TTreeNode)
...
end;

implementation

procedure TMyForm.MyTreeCreateNodeClass(
 Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
begin
 if FFlag then
   result := TMyClass1
 else
   result := TMyClass2
end;




> Reindeer Moss Eater ©   (12.02.07 12:49) [1]
> А как виртуальность конструктора могла бы
> помочь в создании экземпляра другого класса?


Не знаю.. я хочу узнать, можно ли определить конструкторы для TMyClass, чтоб они вызывались при создании узла дерева.


 
Плохиш ©   (2007-02-12 14:06) [4]


> Не знаю.. я хочу узнать, можно ли определить конструкторы
> для TMyClass, чтоб они вызывались при создании узла дерева.

Стоит начать изучать теорию ООП, наконец-то.

PS. Я не думаю, что практическая проверка Вашего вопроса заняла бы больше 5-ти минут времени.


 
hex1287   (2007-02-12 14:23) [5]


> Плохиш ©   (12.02.07 14:06) [4]


Теорию ООП я знаю, да и вопрос все-таки был другой. У Вас есть ответ или просто пофлудить хочется?
Если я в чем не прав, укажите мне на мою ошибку.


 
icWasya ©   (2007-02-12 16:43) [6]

Если D6-D7, то может помочь

type
TMyClass1=class(TTreeNode)
 procedure AfterConstruction;override;
...
end;

TMyClass2=class(TTreeNode)
 procedure AfterConstruction;override;
...
end;

procedure TMyClass1.AfterConstruction;
begin
 inherited;

 ShowMessage("After My Class 1");

end;

procedure TMyClass2.AfterConstruction;
begin
 inherited;

 ShowMessage("After My Class 2");

end;


 
hex1287   (2007-02-12 17:06) [7]


> icWasya ©   (12.02.07 16:43) [6]
> Если D6-D7, то может помочь


О! То что надо. Спасибо!



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

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

Наверх




Память: 0.48 MB
Время: 0.029 c
2-1174396361
nit_ro
2007-03-20 16:12
2007.04.08
как сделать базу данных в Borland Developer Studio 2006?


2-1174156866
Malik
2007-03-17 21:41
2007.04.08
Создание папки во время выполнения программы


2-1174054885
Serg777
2007-03-16 17:21
2007.04.08
БД и Stringgrid


15-1173715498
zdm
2007-03-12 19:04
2007.04.08
TDBF


15-1173995176
Иксик
2007-03-16 00:46
2007.04.08
Кириллическая SMS-ка