Ver Mensaje Individual
  #3  
Antiguo 26-08-2003
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Reputación: 22
gatosoft Va camino a la fama
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....
Responder Con Cita