Sigo pensando que esa referencia al nombre del formulario va a dar siempre error.
Yo lo he probado cambiando por
component, tal y como te he dicho antes y eliminandole el último
else y parece que funciona.
Aquí te subo el ejemplo.
Código Delphi
[-]
procedure CreateForm1(ClassName: TPersistentClass; FormName: String);
var
Component : TComponent;
begin
Component := Application.FindComponent(FormName);
if not Assigned(Component) then begin
try
FindClass('T'+FormName);
except
classes.RegisterClass(ClassName);
end;
Application.CreateForm(TComponentClass(ClassName), component);
end;
TForm(Component).Show;
end;