Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2007
juliobuitrago juliobuitrago is offline
Miembro
 
Registrado: jun 2006
Posts: 37
Poder: 0
juliobuitrago Va por buen camino
Forms dinámicos

Siempre suelo hacer este tipo de procedimiento para lamar a un form.
form1 := tform1.Create(Application);
try
form1.ShowModal;
finally
freeandnil(form1);
end;

Asi mismo para cuando uso reportes, yo uso el qreport
claro, con el print o con el preview en vez de ShowModal;

Pero ahora necesito tener el mismo procedimiento pero pasar el nombre del form como parametro.
Probé que lo que hay escrito en el forum al respeto, tomando la clase del form y demás, pero no me funcionó.

Es que los clientes me tiene locos, y cada uno pide el form de la plantilla diferente y por cada uno hacer lo mismo.........

Alguna solución dinámica, en la que yo pase por ejemplo:
'form1'
o 'form2
y el me sustituya y funcione?

Saludos de antemano.

Fernando
Responder Con Cita
  #2  
Antiguo 15-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
busca por "RegisterClass" y por "fabrica de clases" en el foro.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 15-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Siempre suelo hacer este tipo de procedimiento para lamar a un form.

Código Delphi [-]
form1 := tform1.Create(Application);
try
form1.ShowModal;
finally
freeandnil(form1);
end;
Yo llevo un tiempo convencido de usar algo así:

Código Delphi [-]
with TForm2.Create(nil) do
try
  ShowModal();
finally
  Free();
end;

Y lo dejo dicho aquí para que se sepa de mi bárbara erudición en estos temas.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 15-04-2007 a las 12:43:07.
Responder Con Cita
  #4  
Antiguo 16-04-2007
Sinaloense Sinaloense is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
Sinaloense Va por buen camino
Puedes crear un procedimento como el siguiente:

Código Delphi [-]
procedure TForm4.Button1Click(Sender: TObject);
begin
  ejecuta_forma('TForm6');
end;

procedure TForm4.ejecuta_forma(AClassName: String);
begin
  if AClassName = 'TForm5' then begin
     Form5 := TForm5.Create(Application);
     Form5.ShowModal;
     FreeAndNil(Form5);
  end
  else if AClassName = 'TForm6' then begin
     Form6 := TForm6.Create(Application);
     Form6.ShowModal;
     FreeAndNil(Form6);
  end;

end;

No se si es algo es lo que necesites, hay otra forma más complicada que involucra castings y punteros y funciona con cualquier tipo de forma.



Cita:
Empezado por juliobuitrago
Siempre suelo hacer este tipo de procedimiento para lamar a un form.
form1 := tform1.Create(Application);
try
form1.ShowModal;
finally
freeandnil(form1);
end;

Asi mismo para cuando uso reportes, yo uso el qreport
claro, con el print o con el preview en vez de ShowModal;

Pero ahora necesito tener el mismo procedimiento pero pasar el nombre del form como parametro.
Probé que lo que hay escrito en el forum al respeto, tomando la clase del form y demás, pero no me funcionó.

Es que los clientes me tiene locos, y cada uno pide el form de la plantilla diferente y por cada uno hacer lo mismo.........

Alguna solución dinámica, en la que yo pase por ejemplo:
'form1'
o 'form2
y el me sustituya y funcione?

Saludos de antemano.

Fernando
Responder Con Cita
  #5  
Antiguo 16-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Sinaloense, gracias, es eso lo que necesita, pero imagina que tienes 80 ventantas distintas... 80 ifs son demasiados, de ahí la sugerencia de fábrica de clases, que permite automatizar la creación de ventanas sin los "ifs".

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 16-04-2007
Avatar de rcarrillom
[rcarrillom] rcarrillom is offline
Miembro Premium
 
Registrado: dic 2004
Ubicación: UK / North Sea / Norway / Golfo de México / Frente a mi Laptop
Posts: 219
Poder: 20
rcarrillom Va por buen camino
Saludos al foro.
La unidad AppUtils de las Rx tienen dos funciones interesantes:
Código Delphi [-]
function FindForm(FormClass: TFormClass): TForm;
function FindShowForm(FormClass: TFormClass; const Caption: string): TForm;
que pueden ser modificadas fácilmente para que busquen el nombre de la clase. Espero que haya sido de utilidad.
__________________
eLcHiCoTeMiDo - Rompecorazones profesional
Yo no soy presumido; ¿Pero de qué sirve mi humilde opinión contra la de los espejos?
Salva a un nylon, usa prendas de piel de foca
Responder Con Cita
  #7  
Antiguo 16-04-2007
juliobuitrago juliobuitrago is offline
Miembro
 
Registrado: jun 2006
Posts: 37
Poder: 0
juliobuitrago Va por buen camino
Gracias a todos

Muchas gracias, llevo casi desde el nacimiento del ClubDelphi y sigue siendo único, muchas gracias.
Resuelto.
Responder Con Cita
  #8  
Antiguo 16-04-2007
juliobuitrago juliobuitrago is offline
Miembro
 
Registrado: jun 2006
Posts: 37
Poder: 0
juliobuitrago Va por buen camino
En verdad

Lo que necesito es la fabrica de clases, pues ya lo tengo de la otra forma con los If, el lio es que lo de la fabrica de clases, no me funciona, seguire probando, gracias
Responder Con Cita
  #9  
Antiguo 16-04-2007
juliobuitrago juliobuitrago is offline
Miembro
 
Registrado: jun 2006
Posts: 37
Poder: 0
juliobuitrago Va por buen camino
Sigo, lo siento, ayuda por favor

Esta es la sección del codigo, probando

Código Delphi [-]
type
  Tplantillas_form_menu = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  plantillas_form_menu: Tplantillas_form_menu;

implementation

uses uform_plantillas1,uform_plantillas2;

{$R *.dfm}

procedure Lanza(i:String);
var
  FormClass: TPersistentClass;
  j : TForm;
begin
  FormClass := GetClass(i);
  if Assigned(FormClass) then
   if (FormClass.InheritsFrom(TForm)) then
      with Application do
           if Assigned(FindComponent(i)) then
              (FindComponent(i) as TForm).ShowModal()
           Else
               ShowMessage('No Encontrado');
End;
procedure Tplantillas_form_menu.Button1Click(Sender: TObject);
begin
  Lanza(ComboBox1.Text);
end;

initialization
  RegisterClass(Tform_plantillas1);
  RegisterClass(Tform_plantillas2);
end.

Aqui según el chequeo

Código Delphi [-]
  FormClass := GetClass(i);

Dice que FormClass es Nil, o lo que es lo mismo, parece que no lo reconoce.

Ayuda por fa, creo que estamos cerca.....Si se resuelve, puedo tomar en vez del combo de un array todas las formas que necesito, Saludos

Fernando
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Arreglos Dinamicos diniremix Varios 3 23-05-2006 19:48:31
DBcontrols dinamicos Delfino OOP 5 09-05-2005 22:46:46
Crear Forms Dinamicos diegofhernando Varios 1 25-01-2004 02:26:19
Problema con Forms Dinamicos diegofhernando Varios 5 08-10-2003 03:09:26
Fomrs Dinamicos diegofhernando Varios 3 29-09-2003 18:36:31


La franja horaria es GMT +2. Ahora son las 01:47:05.


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