Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-08-2003
Michel Michel is offline
Miembro
 
Registrado: jul 2003
Ubicación: Venezuela
Posts: 55
Poder: 21
Michel Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 25-08-2003
Avatar de fabianbbg
fabianbbg fabianbbg is offline
Miembro
 
Registrado: ago 2003
Ubicación: Corrientes, Argentina
Posts: 80
Poder: 21
fabianbbg Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 26-08-2003
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
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
  #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
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:49:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi