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 06-02-2015
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Función de Clase para iniciar formulario

Estimados, se puede crear una función de clase para crear y llamar a un formulario de una manera bien cómoda, por ejemplo definir la siguiente función de clase para un formulario modal:

Código Delphi [-]
class function Tf_smName.MostrarVentana(ATag : Integer) : TModalResult;
begin
    with Create(Application) do
    Try
      Tag      := ATag;
      Result   := ShowModal;
    finally
      Free;
    end;
end;

Luego dejas tu formulario no como autocreado sino disponible y en cualquier parte de tu código llamas a la función de clase:

Código Delphi [-]
Tf_smName.MostrarVentana(nroTag);

Para el ejemplo lleno la variable tag para que el formulario sepa debido a qué se le llama.

El problema es que en el evento OnCreate del formulario que hereda esta funcionalidad debo poner:
Código Delphi [-]
f_smName := Self;

Esto es como todos ustedes bien saben, porque las funciones de clase dan funcionalidad a la clase y no instancias objetos, por lo que el único objeto que queda instanciado con esta llamada es Self, luego debo apuntar Self al objeto de formulario con su respectivo nombre.
¿A alguien se le ocurre alguna forma que en el formulario con la funcionalidad básica y del cual se heredan todos los formularios de una aplicación quedara instanciado el nombre y no que tenga que colocar el puntero Self al nombre en cada OnCreate de cada formulario?
No se si se entiende bien la pregunta, pero esa es una duda que dejo de inquietud. (Ojo, la inicialización de la variable Tag no está disponible en el OnCreate, si en el resto del programa).
Responder Con Cita
  #2  
Antiguo 06-02-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Código Delphi [-]
class function Tf_smName.MostrarVentana(ATag : Integer; var AForm: TForm) : TModalResult;
begin
    AForm := Create(Application);
    with AForm do
    Try
      Tag      := ATag;
      Result   := ShowModal;
    finally
      Free;
    end;
end;

No lo he probado en el delphi pero a simple vista asi parece que funcionara el

Código Delphi [-]
Application.CreateForm(TipoForm, VariableForm);

Y la llamada

Código Delphi [-]
Tf_smName.MostrarVentana(nroTag, f_smName);
Responder Con Cita
  #3  
Antiguo 06-02-2015
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola.

Quizá no resuelva todas tus dudas, pero estoy seguro que te interesará echar un vistazo a GH Freebrary. Ahí implementé una funcionalidad similar que explico a grandes rasgos en este otro hilo: http://www.clubdelphi.com/foros/show...008#post463008

Ojalá te sirva para sacar ideas.

Un saludo.
Responder Con Cita
  #4  
Antiguo 07-02-2015
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
Hola.

Quizá no resuelva todas tus dudas, pero estoy seguro que te interesará echar un vistazo a GH Freebrary. Ahí implementé una funcionalidad similar que explico a grandes rasgos en este otro hilo: http://www.clubdelphi.com/foros/show...008#post463008

Ojalá te sirva para sacar ideas.

Un saludo.
Gracias amigo, miraré como resuelves eso, saludos
Responder Con Cita
  #5  
Antiguo 07-02-2015
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje
Código Delphi [-]
class function Tf_smName.MostrarVentana(ATag : Integer; var AForm: TForm) : TModalResult;
begin
    AForm := Create(Application);
    with AForm do
    Try
      Tag      := ATag;
      Result   := ShowModal;
    finally
      Free;
    end;
end;

No lo he probado en el delphi pero a simple vista asi parece que funcionara el

Código Delphi [-]
Application.CreateForm(TipoForm, VariableForm);

Y la llamada

Código Delphi [-]
Tf_smName.MostrarVentana(nroTag, f_smName);
No, no es igual, el código que implemento, crea el formulario, lo ejecuta y lo libera entregando respuesta en una sola instrucción...
Responder Con Cita
  #6  
Antiguo 07-02-2015
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por rarratia Ver Mensaje
No, no es igual, el código que implemento, crea el formulario, lo ejecuta y lo libera entregando respuesta en una sola instrucción...
¡Colega bibliotecario!

Todo lo que sea escribir menos código va en el camino correcto.
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
¿Como crear un formulario de iniciar sesion desde base de datos access?(Delphi 7) feliz-58 Varios 3 27-12-2012 16:38:26
llamar una función desde un formulario cjamacaru PHP 1 03-12-2009 12:52:53
Clase función romanuel C++ Builder 5 20-02-2008 19:42:27
cambiar el formulario q se muestra al iniciar tiagor64 OOP 7 17-06-2005 18:17:49
Ejecutar función al cargar formulario lic_francisco Varios 1 03-05-2005 09:05:49


La franja horaria es GMT +2. Ahora son las 05:09: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