FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
llamar a un formulario
Como hago para llamar a un formulario.
El problema es que yo quiero llamar a un formulario por me dio de un String Ejemplo var oForm1 : string; oform1 tiene el nombre del formulario q deseo llamar q esta en una tabla oform1.show; Como lo hagoo Gracias |
#2
|
||||
|
||||
Hola
Proba.. definir el nombre del form no como un string sino como un objeto, en el ejemplo el form1 llama al form dos en el evento click del buttom 1, crea dos forms, y pegale esto.. espero que te sirva form2 seri ael nombre del form porsupuesto procedure TForm1.Button1Click(Sender: TObject); var f:tobject; begin f:=form2; tform(f).ShowModal; end; end. |
#3
|
||||
|
||||
Prueba la siguiente función:
Código:
Function Get_Frm(pNombreFrm:String):Tform; Var i:Integer; vFrm:Tform; Begin Result:=nil; For i:=0 to Screen.FormCount-1 do Begin vFrm:=Screen.Forms[i]; if UpperCase(vFrm.ClassName)=UpperCase('T'+pNombreFrm) then Begin Result:=vFrm; Exit; end;//if end; //For i end; Para probar como funciona, debes hacer lo siguiente: Código:
procedure TForm1.Button1Click(Sender: TObject); var Elform:Tform; begin Elform:=Get_Frm('Form2'); if ElForm=nil then showmessage('No se puede mostrar el formulario') else ElForm.Show; end; si lo quisieras hacer con formularios dinámicos, Lo ideal seria hacer algo como: Código:
Código erróneo.... pNombreFrm:='Form3'; vFrm:=TFormClass('T'+pNombreFrm).Create(Application); (vFrm as TFormclass('T'+pNombreFrm)).showmodal; if Uppercase(pNombreFrm)='FRMPRINCIPAL' then begin frmPrincipal:=TFrmPrincipal.create(self); frmPrincipal.show; end; ..etc... Saludos.... |
#4
|
||||
|
||||
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. 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; Código:
var Forma: TForm; begin Forma := CrearFormulario(Self, oForm); if Forma <> nil then Forma.Show else Application.MessageBox('Clase no registrada', 'Error', ); end; 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 |
|
|
|