Главная страница
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.042 c
3-71533
Chery
2003-09-02 13:56
2003.09.22
Выдаёт ошибку в SQL при использов. ф-ции Max() с др. полями.


8-71766
e}{e
2003-05-19 00:29
2003.09.22
Как запретить компоненту двигаться по диагонали?


4-72005
-Shurik-
2003-07-18 13:17
2003.09.22
Перехват оконных сообщений


6-71802
Jonni_M
2003-07-24 18:04
2003.09.22
IdPOP3 или NMPOP3 что лучше использовать


1-71621
killer
2003-09-09 13:34
2003.09.22
Как в запущенной программе создать кнопку?