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 03-02-2010
Avatar de jbautista
jbautista jbautista is offline
Miembro
 
Registrado: jul 2008
Posts: 43
Poder: 0
jbautista Va por buen camino
Creacion Correcta de Forms???

Hola que tal, bueno hace tiempo que trabajo con Forms creados en tiempo de ejecución, pero tratando de optimizar mi codigo he visto algunas formas de crear, mostrar y liberar Forms de diferentes maneras que me han causado un poco de confucion.

Lo que hago (y hasta el momento me ha funcionado) es lo siguiente:

Código Delphi [-]
/*
Desde un boton de un FormPrincipal creo y muestro nuevos Forms de la siguiente manera:
*/

procedure TForm_principal.FormatosClick(Sender: TObject);
begin
     Application.CreateForm(TForm_Imp_Formato, Form_Imp_Formato);
      Form_Imp_Formato.Show;
end;

/*
Al hacer lo anterior, obviamente quito la linea Application.CreateForm(...) del DPR.

Y para liberarlo, lo hago desde el Evento OnClose del Form creado de la sig manera:
*/

procedure TForm_Imp_Formato.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Release;
end;

Bueno esto funciona bien al menos ahorita para lo que hago, ya que el FormPrincipal va a estar abierto un tiempo indefinido:

*Pueden abrir un FormX y cerrarlo.
*Abrir uno nuevo, FormY y dejarlo abierto.
*Volver a abrir el FormX.

Cuando creo un Form, deshabito el boton que lo crea y lo muestra, asi evito que lo vuelvan crear y mostrar una 2a vez.

Pero ya NO quiero Deshabilitar el boton, si no que si le vuelven a dar Click una 2a vez, valide:

if //ya esta creado y en Show
{
Poner el Focus en Form
}
else //SI no esta creado
{
Crearlo;
Show;
}

Mis dudas son las siguientes:

¿Quisiera saber si hay alguna manera mas optima de crear, mostrar y liberar Forms?.
¿Como se si un Form ya esta creado para hacer la validación que necesito?

De antemano gracias.
Responder Con Cita
  #2  
Antiguo 03-02-2010
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por jbautista Ver Mensaje
Hola que tal, bueno hace tiempo que trabajo con Forms creados en tiempo de ejecución, pero tratando de optimizar mi codigo he visto algunas formas de crear, mostrar y liberar Forms de diferentes maneras que me han causado un poco de confucion.

Lo que hago (y hasta el momento me ha funcionado) es lo siguiente:

Código Delphi [-]/* Desde un boton de un FormPrincipal creo y muestro nuevos Forms de la siguiente manera: */ procedure TForm_principal.FormatosClick(Sender: TObject); begin Application.CreateForm(TForm_Imp_Formato, Form_Imp_Formato); Form_Imp_Formato.Show; end; /* Al hacer lo anterior, obviamente quito la linea Application.CreateForm(...) del DPR. Y para liberarlo, lo hago desde el Evento OnClose del Form creado de la sig manera: */ procedure TForm_Imp_Formato.FormClose(Sender: TObject; var Action: TCloseAction); begin Release; end;


Bueno esto funciona bien al menos ahorita para lo que hago, ya que el FormPrincipal va a estar abierto un tiempo indefinido:

*Pueden abrir un FormX y cerrarlo.
*Abrir uno nuevo, FormY y dejarlo abierto.
*Volver a abrir el FormX.

Cuando creo un Form, deshabito el boton que lo crea y lo muestra, asi evito que lo vuelvan crear y mostrar una 2a vez.

Pero ya NO quiero Deshabilitar el boton, si no que si le vuelven a dar Click una 2a vez, valide:

if //ya esta creado y en Show
{
Poner el Focus en Form
}
else //SI no esta creado
{
Crearlo;
Show;
}

Mis dudas son las siguientes:

¿Quisiera saber si hay alguna manera mas optima de crear, mostrar y liberar Forms?.
¿Como se si un Form ya esta creado para hacer la validación que necesito?

De antemano gracias.




Código Delphi [-]

  /// este evento va en el boton de creacion del form
  Form1 := TForm1.Create(nil);
  if NOT Assigned(Form1) then //SI El form no esta creado
  Begin
     Form1 := TForm1.Create(nil);
  END
  ELSE;
  Form1.Show;

//// en el evento onclose del form que llamaste
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(Form1);
end;
__________________
all your base are belong to us
Responder Con Cita
  #3  
Antiguo 03-02-2010
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
tambien aqui puedes ampliar un poco mas tus dudas
__________________
all your base are belong to us
Responder Con Cita
  #4  
Antiguo 03-02-2010
Avatar de jbautista
jbautista jbautista is offline
Miembro
 
Registrado: jul 2008
Posts: 43
Poder: 0
jbautista Va por buen camino
look: Muchas gracias, es exactamente lo que necesitaba y el link ya me aclaro las dudas!

Saludos
Responder Con Cita
  #5  
Antiguo 03-02-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por jbautista Ver Mensaje


...
/*
Desde un boton de un FormPrincipal creo y muestro nuevos Forms de la siguiente manera:
*/

Código Delphi [-]
procedure TForm_principal.FormatosClick(Sender: TObject);
begin
     Application.CreateForm(TForm_Imp_Formato, Form_Imp_Formato);
      Form_Imp_Formato.Show;
end;
/*
Al hacer lo anterior, obviamente quito la linea Application.CreateForm(...) del DPR.

Para no estar borrando nada del .DPR deberias indicarle a Delphi que formulario debe crear y cuales no.. Ésto se consigue entrando en el menú Project>Opcions > Pestaña Forms, del IDE. Si te fijas en dicha pestaña hay 2 partes, la una dice: Auto-create Forms que es donde están todos tus formularios que delphi va crear en el .DPR al correr la aplicacion, la otra parte dice: Available Forms que son todos los formulario que delphi no los va a crear(instanciar) al iniciar la aplicacion(Incluso hay un combobox donde puedes selecionar cuál va ser tu formulario principal)
Tú debes decidir cuales se van a crear al correr la aplicacion y cuales no, tan solo debes pasarlo de un lado para el otro, eso ya es criterio tuyo.
Por otra parte el codigo que te propone look tiene una linea por demás, el código que te propone él ,quedaría mas o menos de esta manera:
Código Delphi [-]
/// este evento va en el boton de creacion del form
  if NOT Assigned(Form1) then //SI El form no esta creado
     Form1 := TForm1.Create(Application);
 
 Form1.Show;
Por supuesto no debes olvidar de destruirlo y ponerlo en nulo (nil) al cerrarlo tal como te ha indicado look,en el evento OnClose
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 03-02-2010 a las 22:53:09.
Responder Con Cita
  #6  
Antiguo 26-05-2010
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Me arroja un error de acceso de violación al crear el formulario disponible.

Tendra algo que ver el que tenga la aplicación como una instancia Mutex para evitar una doble ejecución.
Responder Con Cita
  #7  
Antiguo 27-05-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Question

Cita:
Empezado por MAXIUM Ver Mensaje
Me arroja un error de acceso de violación al crear el formulario disponible.

Tendra algo que ver el que tenga la aplicación como una instancia Mutex para evitar una doble ejecución.
¿Cómo estás creando y destruyendo tu formulario?...
Pon algo de código....
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #8  
Antiguo 27-05-2010
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
no contestar, error
__________________
all your base are belong to us
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
Creación/destrucción dinámica de forms; confirmar destrucción. Jose_Pérez Varios 3 18-01-2006 12:32:13
creación de forms dinámica dandia28 OOP 2 30-12-2005 17:18:34
Creacion y destruccion de forms lbidi Varios 7 01-09-2005 18:07:34
Creación de Forms en runtime con Tipo dinámico Aprendiz OOP 2 29-09-2004 10:35:25
Creación de Forms javiermorales OOP 5 12-05-2003 17:38:51


La franja horaria es GMT +2. Ahora son las 12:24:46.


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