Страница 2 из 2
Добавлено: 06 май 2006, 12:28
Blood_Magic
типы в run-time описывать нельзя
Добавлено: 06 май 2006, 12:39
LAngel
можно создавать (как это делает, например TCollection) тип класса и указывать его.
например:
и в коде создавать уже его.
Код: Выделить всё
function CreateComeClass(AClass: TObjectClass): TObject;
begin
Result := AClass.Create;
end;
пример использования:
Добавлено: 06 май 2006, 14:53
vitek1
2 Blod_Magic
Я бы не стал так котигорично утверждать о невозможности создания класса динамически. Если покопаться в структуре VMT, то все может быть. И если класс создать все же не получиться, то скорее всего возможно изменить через VMT заготовленное заранее описание
TMyClass = class(TObject) end;
до неузнаваемости, добавив ему необходимые поля и методы
Добавлено: 10 май 2006, 12:27
vunder
RegisterClass регистрирует любой класс, необязательно визуальный.
Для получения класса советую использовать GetClass, а не FindClass, т.к. если не находит класс с таким именем, то возвращает nil, а FindClass генерирует исключение.
Я так делал в своей программе: и классы объекстов и списковые классы являлись наследниками от одного объекта. Потом объявлял TMyClass = class of TMyObject и еще писал функцию проверяющую, является ли данный данный класс наследником от другого
Re: Создание класса по его имени
Добавлено: 26 окт 2009, 09:53
atavin-ta
" писал(а):типы в run-time описывать нельзя
Ты загрузил транслятор, описал тип и запустил процесс трансляции. Тип создан, но для транслятора это рантайм. Или ты имеешь ввиду, что прилада не может создавать новые типы в рантайм? Запихай в неё транслятор с каким нибудь метатипом - сможет.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
" писал(а):разрабатываю язык GPSS
А если разрабатывается язык, то причём здесь вообще прилады и ограничения на создание типа в рантайме? Уж если язык, то значит транслятор, а транслятор должен создавать типы именно в рантайме. Возможно даже только в рантайме.