Ver Mensaje Individual
  #4  
Antiguo 27-08-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita