Недостаточно информации в вопросе.
Откуда происходит "тип" объектов формы (в вопросе)? Это просто имя типа? Как CreateObjects () обнаруживает тип, необходимый для каждого объекта?
Он не может быть получен из "типа" переданной ссылки на объект, поскольку это может быть (и почти наверняка будет, как в вашем примере) просто базовый тип, из которого в конечном итоге будет получен требуемый конкретный тип.
Без более подробной информации о ваших конкретных целях и ограничениях реализации полный, конкретный ответ невозможен.
Однако в общих чертах то, что вы ищете, может быть достигнуто с помощью комбинации виртуальных конструкторов и RegisterClass / FindClass , предоставляемых VCL.
Проще говоря, у вас будет базовый класс, который представляет общий конструктор, используемый для создания экземпляров ваших классов [для TComponent производных классов, он уже существует в виде Create () Владелец: TComponent ) конструктор].
Во время выполнения вы можете получить ссылку на любой (зарегистрированный) класс, используя FindClass ( 'TClassName' ) . Это вернет ссылку на класс, с помощью которого вы сможете вызвать соответствующий виртуальный конструктор:
type
TFoo = class ....
TFooClass = class of TFoo;
// etc
var
someClass: TFooClass;
someObj: TFoo;
begin
someClass := TFooClass(FindClass('TFooDerivedClass'));
someObj := someClass.Create(nil);
:
Обратите внимание на то, что TFooDerivedClass является классом, который в конечном счете является производным от TFooClass (и предполагается, что для простоты, в свою очередь, происходит от TComponent и создается с владельцем NIL в этом случае). Классы, которые уже зарегистрированы в системе типов, можно найти с помощью FindClass () . Это включает в себя любой класс элемента управления или компонента, на который ссылается некоторый DFM в вашем приложении. Любые дополнительные классы, которые необходимо зарегистрировать, могут быть явно зарегистрированы с использованием RegisterClass () .
То, как ваше конкретное приложение идентифицирует типы вовлеченных объектов, и любое сопоставление имен типов с другой произвольной системой идентификации - это деталь реализации, о которой вы должны позаботиться.