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-06-2008
tanaka_reina tanaka_reina is offline
Miembro
 
Registrado: jun 2008
Posts: 15
Poder: 0
tanaka_reina Va por buen camino
[Consulta] Form`s - Volverlos al estado inicial

La consulta, viene ya que al realizar una accion con el programa en ejecucion.. completar un formulario X (datos personales, consultas a DB etc), tras cerrarlo y volverlo a abrir los datos continuan(es logico ya que no limpio los componentes).
Si alguien conoce(si es que existe) la forma de volver a 0(o estado inicial) un form(lo que busco es algo tan facil como cuando hacemos Edit1.Clear() ) la comente, actualmente lo puedo hacer limpieando cada edit, desconectando componetes(tipo DBgrid) de Querys, pero son bastantes componentes.

Thanks.
Responder Con Cita
  #2  
Antiguo 15-06-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Yo tengo un procedimiento especial para "limpiar o inicializar" componentes... cada vez que lo necesito, sólo lo mando llamar...

Si existe una manera de hacerlo más fácil nos ayudará a ambas saberlo

Saludos,
Responder Con Cita
  #3  
Antiguo 15-06-2008
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,

No sé si servirá en este caso decir que, cuando se destruye un formulario, y se vuelve a crear, este se presenta "inicializado". Es decir, observemos el siguiente código: daría igual la cantidad de "Edits" que hubiera en el formulario "TFormTest", puesto que, siempre que se mostrara el mismo (luego de crearlo) dichos "Edits" estarían con su valor "de inicio".

Código Delphi [-]
begin
  with TFormTest.Create(nil) do
  try
    ShowModal();
  finally
    Free();
  end;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 15-06-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Aparte de lo comentado por dec, sé que es una pregunta simplona, pero, ¿usaís algún bucle?

Lo normal sería:
Código Delphi [-]
procedure Limpia(T:TWincontrol);
begin
for i:= 0 to t.controlCount-1  do
begin
  if controls[i] is TwinControl then Limpia(c)
  else if controls[i] is TEdit then  TEdit(controls[i]).Clear
  else if controls[i] is TDBEdit then TDBedit(controls[i]).Datasource := nil;
end;

Para llamarlo:
Código Delphi [-]
  Limpia(Form1);

Habría que estudiarlo un poco mejor, pero creo que se puede hacer.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 15-06-2008
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
El único problema de los inicializadores automáticos, es que no siempre un 0 o un '' es un valor inicial... xD

Siempre te toca realizar algunas comprobaciones, en la mayoría de los casos.

Saludos
Responder Con Cita
  #6  
Antiguo 15-06-2008
tanaka_reina tanaka_reina is offline
Miembro
 
Registrado: jun 2008
Posts: 15
Poder: 0
tanaka_reina Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Hola,

No sé si servirá en este caso decir que, cuando se destruye un formulario, y se vuelve a crear, este se presenta "inicializado". Es decir, observemos el siguiente código: daría igual la cantidad de "Edits" que hubiera en el formulario "TFormTest", puesto que, siempre que se mostrara el mismo (luego de crearlo) dichos "Edits" estarían con su valor "de inicio".


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



Agrege en el evento ONCLOSE del formulario

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




Lo que me devuelve, es lo mismo que cuando hago destroy() and Create()... error el componente xxxx ya existe.(y luego Access violation at address 000...)
Responder Con Cita
  #7  
Antiguo 15-06-2008
tanaka_reina tanaka_reina is offline
Miembro
 
Registrado: jun 2008
Posts: 15
Poder: 0
tanaka_reina Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Aparte de lo comentado por dec, sé que es una pregunta simplona, pero, ¿usaís algún bucle?

Lo normal sería:

Código Delphi [-]
procedure Limpia(T:TWincontrol);
begin
for i:= 0 to t.controlCount-1 do
begin
if controls[i] is TwinControl then Limpia(c)
else if controls[i] is TEdit then TEdit(controls[i]).Clear
else if controls[i] is TDBEdit then TDBedit(controls[i]).Datasource := nil;
end;




Para llamarlo:

Código Delphi [-]
Limpia(Form1);





Habría que estudiarlo un poco mejor, pero creo que se puede hacer.

Saludos

Error en "c" //if controls[i] is TwinControl then Limpia(c) <<< que tipo seria?, para que funcione le puse el nombre del form, y como resultado tengo un overflow..

Es bueno aclarar que no es solo borrar lo que esta en un edit... sino tambien reiniciar todos sus atributos,a el estado cuando se ejecuto inicialmente el programa (ejemplo, enable:=true, color xxx, etc etc). Como me parece mucho hacerlo uno por uno (ademas que corro riesgo de que se me pase por algo algun atributo y me estropee los datos almacenados en la DB).

Thanks
Responder Con Cita
  #8  
Antiguo 15-06-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Código Delphi [-]
procedure TForm1.Limpia(T:TWincontrol);
begin
for i:= 0 to t.controlCount-1 do
begin
if controls[i] is TEdit then TEdit(controls[i]).Clear
else if controls[i] is TDBEdit then TDBedit(controls[i]).Datasource := nil
else if controls[i] is TwinControl then Limpia(controls[i]) // para que limpie los controles que están dentro de paneles
end;

Obviamente lo estoy haciendo de memoria ya que no tengo delphi a mano, ahora deben estar corregidos los dos errores.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 16-06-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola tanaka_reina, si necesitas que se limpie todo al cerrar tu formulario, deberías seguir lo que te explico Dec. El codigo que te puso de ejemplo no debes colocarlo en el OnClose de tu formulario, sino en el momento en que llamas a tu formulario, ademas que debes quitar el formulario del AutoCreate, ya que tu lo crearas y lo liberaras cuando lo necesites.

Para quitar del AutoCreate (Project->Options->Forms).

Si estas haciendo la llamada a tu formulario con Show, haces lo siguiente, digamos que Form1 es el formulario de donde llamaras a Form2:

En Form1, donde llames a Form2

Código Delphi [-]
 Form2 := TForm2.Create(Self); //Creamos Form2
 Form2.Show;

Y en el evento OnClose de Form2:

Código Delphi [-]
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree; //liberamos Form2
end;

Y si estas haciendo la llamada a tu formulario con ShowModal, colocas este codigo en el momento en que lo estas llamando.

Código Delphi [-]
 Form2 := TForm2.Create(Self); //Creamos Form2
 try
   Form2.ShowModal;
 finally
   Form2.Free; //Una vez que se cierra Form2, se libera
 end;

Pero si necesitas limpiar estando dentro de tu formulario, sin cerrarlo, debes hacerlo como te explica Lepe.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #10  
Antiguo 16-06-2008
tanaka_reina tanaka_reina is offline
Miembro
 
Registrado: jun 2008
Posts: 15
Poder: 0
tanaka_reina Va por buen camino
La idea apuntaba mas a la respuesta(ahora entendida :P) de Dec (Caro gracias por la explicacion, la verdad no entendia para que era....por eso lo mande donde se me ocurrio).

Hasta hace 5 minutos estaba haciendolo muy manualmente, lo que me llevaba muchos minutos por forms, ahora voy a probar de implementar estas formas(ambas sirven, tanto de limpiar cerrando el form, como sin cerrarlo).

Thanks.
Responder Con Cita
  #11  
Antiguo 16-06-2008
tanaka_reina tanaka_reina is offline
Miembro
 
Registrado: jun 2008
Posts: 15
Poder: 0
tanaka_reina Va por buen camino
Cita:
Empezado por Caro Ver Mensaje
Hola tanaka_reina, si necesitas que se limpie todo al cerrar tu formulario, deberías seguir lo que te explico Dec. El codigo que te puso de ejemplo no debes colocarlo en el OnClose de tu formulario, sino en el momento en que llamas a tu formulario, ademas que debes quitar el formulario del AutoCreate, ya que tu lo crearas y lo liberaras cuando lo necesites.

Para quitar del AutoCreate (Project->Options->Forms).

Si estas haciendo la llamada a tu formulario con Show, haces lo siguiente, digamos que Form1 es el formulario de donde llamaras a Form2:

En Form1, donde llames a Form2


Código Delphi [-]
Form2 := TForm2.Create(Self); //Creamos Form2
Form2.Show;





Y en el evento OnClose de Form2:


Código Delphi [-]
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree; //liberamos Form2
end;





Y si estas haciendo la llamada a tu formulario con ShowModal, colocas este codigo en el momento en que lo estas llamando.


Código Delphi [-]
Form2 := TForm2.Create(Self); //Creamos Form2
try
Form2.ShowModal;
finally
Form2.Free; //Una vez que se cierra Form2, se libera
end;





Pero si necesitas limpiar estando dentro de tu formulario, sin cerrarlo, debes hacerlo como te explica Lepe.

Saluditos
En efecto, funciona, con tan solo 6 lineas de codigo me ahorre cientos... interesante.
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
Duda con estado de consulta m.ruiz SQL 6 29-10-2007 16:46:27
Comprobar el estado de un form luxus OOP 7 08-08-2007 18:15:32
Consulta Estado de una Tabla SQL Alejandro73 SQL 2 24-06-2007 00:03:00
Llamada a Form de Consulta y retorno de informacion cervexa OOP 6 08-07-2003 15:11:19


La franja horaria es GMT +2. Ahora son las 13:36:38.


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