Ответ 1
Это из справки Delphi (Delphi 2006, но также доступно, по крайней мере, с Delphi 7):
Синтаксис function GetClass (const AClassName: string): TPersistentClass;
Описание Вызовите GetClass, чтобы получить класс из имени класса. Этот класс может использоваться как параметр для подпрограмм, требующих класса. Класс должен быть зарегистрирован до того, как GetClass сможет его найти. Классы форм и классы компонентов, на которые ссылаются в объявлении формы (переменные экземпляра), автоматически регистрируются при загрузке формы. Другие классы могут быть зарегистрированы путем вызова RegisterClass или RegisterClasses.
Вот пример кода. Работает как таковая только потому, что TButton является TControl, и поэтому действительный тип действителен.
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClasses([TButton, TForm]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CRef : TPersistentClass;
AControl : TControl;
begin
CRef := GetClass('TButton');
if CRef<>nil then
begin
AControl := TControl(TControlClass(CRef).Create(Self));
with AControl do
begin
Parent := Self;
Width := 50;
Height := 30;
end;
end;
end;