Главная страница
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.04 c
3-71467
ddenis
2003-08-29 00:31
2003.09.22
Как подружить COM, TDataSet и ASP?


14-71873
bl_wizard
2003-09-02 18:54
2003.09.22
Примерная стоимость разработки БД


14-71937
Kost
2003-08-29 09:42
2003.09.22
Программинг


4-72009
_smile
2003-07-21 13:59
2003.09.22
Использование accelerator tables


3-71491
peter_login
2003-09-01 14:36
2003.09.22
Компонет для работы с полем БД типа tdatetime