Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.044 c
15-1173978662
Vendict
2007-03-15 20:11
2007.04.08
Подскажите программу.


1-1171525882
oleg__
2007-02-15 10:51
2007.04.08
Прокрутка в TSrollBox


3-1169047570
ПВ
2007-01-17 18:26
2007.04.08
Проблемы BDE+Paradox под терминальным сервером


2-1173721206
Василиус
2007-03-12 20:40
2007.04.08
Всем доброго времени суток


3-1169032798
Rule
2007-01-17 14:19
2007.04.08
Вопрос знатокам MSSQL Server 2005/2000





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский