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;
Esta te devloverá todos los formularios que estan Creados pero no son visibles. (Estos se guardan en la lista Screen.Forms[i]);
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;
Esto es solo para formularios que no se crean dinámicamente.
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;
Pero eso no funciona.... Entonces por ahora (mientras averiguamos como hacerlo), deberias ser mas explicito y evaluar tu cadena de texto asi:
if Uppercase(pNombreFrm)='FRMPRINCIPAL' then
begin
frmPrincipal:=TFrmPrincipal.create(self);
frmPrincipal.show;
end;
..etc...
Saludos....