Главная страница
    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
Время: 2.622 c
3-1168947590
vlad2
2007-01-16 14:39
2007.04.08
Есть ли альтернатива Paradox y?


3-1169113342
Castlevania
2007-01-18 12:42
2007.04.08
InterBase SQL и память


6-1161367061
Русло
2006-10-20 21:57
2007.04.08
Как из своего приложения запустить подключение к GPRS


9-1146898055
Kn1ght
2006-05-06 10:47
2007.04.08
падение тела


15-1174033980
Magedon
2007-03-16 11:33
2007.04.08
Delphi 10 lite





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