PDA

Ver la Versión Completa : Crear Form en tiempo de Ejecución


harvicoco
27-06-2006, 23:24:05
Amigos, quisiera saber si hay la posibilidad de crear un Form sabiendo el nombre de la clase del form; es decir:

Var Form:TForm;
Link:String;
Begin
Link:='TForm1';
Form:=TForm(Link).Create(Self);
End;

Eso es lo que hago y me sale error, no se si hay alguna forma de poder hacer eso; obviamente Link puede ser cualquier Formulario que esta dentro del Proyecto, solo que necesito asignarselo a la variable Form para poder trabajarlo. Gracias de antemano.

JCarlosas
28-06-2006, 00:02:01
Hola
Por el nombre de la clase de ventana no se si sera posible pero de esta otra manera si lo es:


procedure TfrmTools.sbAmpliarTchartTemporalClick(Sender: TObject);
Var
frmTchartAmpliados : TfrmTchartAmpliados;

begin
frmTchartAmpliados := TfrmTchartAmpliados.Create(self);
.
//HAcer aqui lo que haga falta antes de mostrar la ventana..
.
frmTchartAmpliados.Show; //Mostrar la ventana



TfrmTchartAmpliados debe ser el nombre (Tipo) de una clase de ventana (Formulario) que tienes que haber diseñado previamente.
Debes incluir en la clausula uses de la unit donde pongas este codigo el nombre de la unit donde esta el formulario diseñado.

Debes ademas eliminar la creacion del formulario en el programa principal.

Creo que en esencia eso es todo.

Saludos
Juan Carlos

Neftali [Germán.Estévez]
28-06-2006, 09:41:09
Se puede hacer lo que necesitas utilizando RTTI siempre y cuando la clase esté registrada.
Para acceder a la clase debes utilizar GetClass y para registrar una clase se usa el procedimiento RegisterClasses.

Creo que es más sencillo verlo con un ejemplo. En este caso se registra la clase en el DPR y desde el Form1 se crea el Form2 a partir del nombre de la clase.

harvicoco
28-06-2006, 14:55:05
Muchas gracias, me funcionó con el RegisterClass y el GetClass, ya me estaba por reventar la cabeza de tanto pensar jejeje, mil gracias