Главная страница
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.028 c
2-1174254174
uranius
2007-03-19 00:42
2007.04.08
как грамотно отправить xml запрос по http ?


15-1173709456
Галинка
2007-03-12 17:24
2007.04.08
break, Continue что еще?


3-1169124696
ildarkh
2007-01-18 15:51
2007.04.08
Обмен большими данными между Oracle и FireBird


2-1174377014
DimonS
2007-03-20 10:50
2007.04.08
Имя пользователя из-под Delphi


1-1171135629
чуть помедленнее
2007-02-10 22:27
2007.04.08
TYPE CAST