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

Вниз

Ссылка на класс?   Найти похожие ветки 

 
AlexanderSK   (2003-09-10 12:25) [0]

Можно ли сделать следующее:
функцию которая получает ссылку на клас, создает этот класс и возвращает указатель на него?

Если возможно то как это сделать?


 
Nikolay M. ©   (2003-09-10 12:30) [1]

Общий родитель для классов есть?


 
Кто-то   (2003-09-10 12:32) [2]

Если конструктор класса виртуальный, то можно.

function CreateComponent(AClass: TComponentClass; AOwner: TComponent): TComponent;
begin
Result := AClass.Create(AOwner)
end;

Пример вызова:
TEdit(CreateComponent(TEdit, Self)).Parent := Self;


 
AlexanderSK   (2003-09-10 12:35) [3]

>Nikolay M.
Да есть!


 
Кто-то   (2003-09-10 12:43) [4]

> AlexanderSK (10.09.03 12:35) [3]

Если общий класс - компонентский, то см. выше. Если нет, то сделайте так.

type
TMyBase - class(...)
...
public
constructor Create(...); virtual;
...
end;

TMyBaseClass = class of TMyBase;

А дальше - по уже приведенному примеру с заменой TComponent на TMyBase и TComponentClass на TMyBaseClass.


 
Nikolay M. ©   (2003-09-10 12:44) [5]

Ну так что мешает вызывать его?
Плюс можно посмотреть исходник TApplication.CreateForm - может это то, что нужно?


 
AlexanderSK   (2003-09-10 13:01) [6]

А как в этой же функции вызвать метод созданного объекта? В общем родителе этого метода нет!


 
Nikolay M. ©   (2003-09-10 13:06) [7]


> AlexanderSK (10.09.03 13:01) [6]

Имхо, что-то тут не так...
Создание любого объекта-родителя - это я могу понять. Но идеологически, с разными потомками и обращаться нужно по-разному. Опиши в целом, что делаешь?


 
Кто-то   (2003-09-10 13:11) [8]

> AlexanderSK (10.09.03 13:01) [6]

1. Можно сделайть в обшем родителе абстрактный метод.

2. Можно привести к конкретному классу (если он известен). См. выше - свойства Parent у TComponent тоже нет, но мы знаем, что реально создается TEdit - поэтому приводим полученный экземпляр к TEdit и назначаем Parent. Точно так же и с методами.



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

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

Наверх




Память: 0.48 MB
Время: 0.031 c
14-71832
Vlad Oshin
2003-09-04 14:44
2003.09.22
где бы D2 скачать?


1-71675
Pavel Oliynik
2003-09-11 11:28
2003.09.22
подстановку label.caption из ресурса по название лейбела


14-71830
Комиссар
2003-09-01 14:58
2003.09.22
Зеленая миля


1-71746
Broot
2003-09-10 10:42
2003.09.22
Разбиение строкИ на стрОки


6-71810
borg
2003-07-16 08:49
2003.09.22
mailto