Michel:
Puedes crear un objeto a partir del nombre de su clase usando la función GetClass en clases previamente registradas con el procedimiento RegisterClass.
Para el caso específico de formularios podrías hacer lo siguiente:
En la sección
initialization de cada formulario que desees crear dinámicamente por medio del ombre de su clase registras ésta:
Código:
unit Unit2;
interface
uses
Classes, Forms;
type
TForm2 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
initialization
RegisterClass(TForm2);
end.
Después, para crear en código el formulario utiliza la siguiente función:
Código:
function CreaFormulario(Owner: TComponent; Nombre: String): TForm;
var
FormaClase: TFormClass;
begin
FormaClase := TFormClass(GetClass(Nombre));
if FormaClase <> nil
then Result := FormaClase.Create(Owner)
else Result := nil;
end;
Usas esta función así:
Código:
var
Forma: TForm;
begin
Forma := CrearFormulario(Self, oForm);
if Forma <> nil then
Forma.Show
else
Application.MessageBox('Clase no registrada', 'Error', );
end;
Donde "Self" se refiere al formulario desde donde creas los otros formularios y "oForm" es un string con el nombre de la clase de formulario que desees crear.
Quizá te convenga revisar el siguiente hilo
http://www.clubdelphi.com/foros/arch...hlight=fabrica
así como las referencias que allí se indican que tratan este tema con más detalle. En particular quizá encuentres útil el concepto de "fábrica de clases".
// Saludos