Форум: "Основная";
Текущий архив: 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