Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизСсылка на класс? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c