Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
limpiar todos los valores del formulario

Aqui vengo con otra de mis dudas .

Tengo 1 formulario con infinidad de Edits y labels, y quiero que cuando el formulario "close" pues que todos los valores vuelvan a su valor por defecto.

¿Es posible?

O tengo que currarme cada elemento con "clear"

Responder Con Cita
  #2  
Antiguo 15-09-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Lo que se me ocurre es que puedes crear en forma dinamica, y destruir el form cada ves que los cierres.

Eso lo haces con

If Form1=nil Then
Application.CreateForm(TForm1, Form1)
Form1.Show;

Suerte
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #3  
Antiguo 15-09-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Me olvidaba de decirte de quebes sacar del listado de forms que genera automaticamente el proyecto al iniciarce

__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #4  
Antiguo 16-09-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
cisterpe,

si el formulario se cierra, ¿cuál es el interés que tienes en sus valores?

Como bien dice viet, si cada vez que lo abres lo creas entonces tendrás siempre los valores originales.

Ahora bien, si necesitas cerrar el formulario pero sin destruirlo puedes borra los valores con un ciclo:

Código:
for I := 0 to Pred(ComponentCount) do
begin
  if Components[i] is TEdit then
    TEdit(Components[i]).Clear
  else if Components[i] is TLabel then
    TLabel(Components[i].Caption) := '';
end;
// Saludos
Responder Con Cita
  #5  
Antiguo 16-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
Muchas gracias a los 2. Voy a probar lo de desctruir el form cada vez y ya esta
Responder Con Cita
  #6  
Antiguo 16-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
No me funciona.

El form1 lo crea cuando pulso el boton sin problemas pero le he puesto en el evento OnClose -> form1.destroy; y me da error el compilador cuando estoy ejecutando y cierro el form
Responder Con Cita
  #7  
Antiguo 16-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
Ahora tengo otro problema.

He solucionado el anterior destruyendo el form cuando le pregunto si existe:

If form1=nil Then
begin
Application.CreateForm(TForm, form1);
end
else
begin
form1.Destroy;
Application.CreateForm(Tform1, form1);
end;
form1.show;

Pero la 2ª vez que creo el formulario no me crea los componentes Data source y query que tenia en el formulario
Responder Con Cita
  #8  
Antiguo 16-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
hola cisterpe

Una buena manera para crear y destruir formularios que llamas con el método Show es poner en su evento OnClose esto

Código:
  Action := caFree;
Quizas esto te arregle tu problema
Responder Con Cita
  #9  
Antiguo 16-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
Gracias Cadetill, pero poniendo lo que tu dices sigue sin funcionar .

Lo que no se es pq cuando vuelvo a crear el form de la otra forma que lo he hecho no me crea los controles para la base de datos
Responder Con Cita
  #10  
Antiguo 16-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
donde haces la creación, en el OnCreate o en el OnShow? Mira de poner un BreakPoint allí a ver cuando pasa y cuando no (para ir descartando posibilidades)
Responder Con Cita
  #11  
Antiguo 16-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
El create lo he puesto en el evento onclick de 1 boton.

Evento on close del form (nombre= Presu)

procedure TPresu.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Enabled:=true; <- (Break point) OK
Action:=cafree;
presu.Destroy;

end;<- (Break point) OK
------------------------------------------------------- <<<Error>>>
end.


Error -> Acces violation at adress 00000002. Read of adress FFFFFFFF

Error -> Abstract error.

Programa sigue funcionando pero si intento volver a crear el form me da el mismo error otra vez.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Si en vez de eso elimino el form antes de volverlo a crear, no me crea los controles de la base de datos

He añadido al Oncreate del formulario:

qobj.Active:=true;
qobj.sql.Clear;
qobj.SQL.add('Select * from objur order by nombre');
qobj.Open;

por si se borraba y no me da error pero sigue sin funcionar cualquier consulta
Responder Con Cita
  #12  
Antiguo 16-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Veamos, que creo que nos estamos liando

Tenemos dos forms (digamos Form1 y Form2). Desde Form1 llamamos a Form2 y queremos que los datos de Form2 se inicialicen cada vez que es llamado.

Primero: si lo haces la llamada con un simple Show, ten en cuenta que se podrá llamar a From2 tantas veces como se quiera des de Form1, por lo que eso habra que contemplarlo. Así que la forma de llamar a Form 2 puede quedar así

Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form2 = nil then
    Form2 := TForm2.Create(Application);
  try
    Form2.Show;
  except
      FreeAndNil( Form2 );
  end;
end;
de esta manera mostramos la misma instancia de Form2 si ya está creado.

Luego, en Form2, en su evento OnCreate, hacemos las inicializaciones pertinentes.

Código:
procedure TForm2.FormCreate(Sender: TObject);
begin
  // aqui las inicializaciones
end;
Y luego tenemos que asegurarnos de su destrucción en el OnClose del forms (Form2)

Código:
procedure TForm2.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;
A ver si con esto lo logramos arreglar
Responder Con Cita
  #13  
Antiguo 16-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
Si pongo lo que tu dices, tengo el mismo problema, pero en vez de salirme el error cuando salgo me lo presenta cuando intento volver a entrar.


No se si sera pq tiene componentes de base de datos
Responder Con Cita
  #14  
Antiguo 16-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Cita:
Posteado originalmente por cisterpe
No se si sera pq tiene componentes de base de datos
Pues no, no tiene nada que ver. A ver, haz una cosa, pon lo que haces en los eventos que yo he puesto arriba a ver si localizamos el error
Responder Con Cita
  #15  
Antiguo 16-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
-----------------OnClick ----------------------------------
procedure TForm1.Presupuestos1Click(Sender: TObject);
begin
IF(FORM1.qlogin['PRESUPUESTO'] ='True') then //permisos usuario
BEGIN
form1.Enabled:=false;

if presu = nil then
presu := Tpresu.Create(Application);
try
presu.Show;
except
FreeAndNil( presu );
end;


// <<<---- Con esto me funciona pero no me carga los sql---->>>
//If Presu=nil then
//begin
//Application.CreateForm(TPresu, Presu);
//end
//else
//begin
//presu.Destroy;
//Application.CreateForm(TPresu, Presu);
//end;
//presu.show;
// <<<-------------- Fin comentarios --------------->>>

END
else
showMesSage('No tiene permisos para acceder a esta zona.');
end;




---------------OnCreate---------------------------
procedure TPresu.FormCreate(Sender: TObject);
begin
SysLocale.MiddleEast := True;
valor:=0;
Edit1.BiDiMode := bdRightToLeft;
.
.
.
.
Edit65.BiDiMode := bdRightToLeft;
qobj.Active:=true; // Por si no cargaba la consulta sql
qobj.sql.Clear;
qobj.SQL.add('Select * from objur order by nombre');
qobj.Open; // fin consulta sql
end;





-----------------On close-----------------------------------
procedure TPresu.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Enabled:=true;
Action := caFree;
end;


Siento causar tantas molestias
Responder Con Cita
  #16  
Antiguo 16-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Ante todo, no son molestias, estamos aqui para esto y lo que haga falta (pero sin pasarse, eh!!!)

Bueno, visto tu código, sólo le veo una cosa "rara". Antes de cargar el SQL, estas activando la Query, por lo que... no se cómo no te "peta" ya la primera vez que habres el formulario

La linea
Cita:
qobj.Active:=true; // Por si no cargaba la consulta sql
yo la cambiaría por
Cita:
qobj.Active:=false; // Por si no cargaba la consulta sql
Ya que antes de cambiar el SQL del Query, hay que desactivar ésta.

Otra cosa que puedes probar (por si no era esto), es poner un breakpoint en el OnCreate y ver cuantas veces pasa por ahí. De esta manera sabrás si la segunda vez que haces la llamada realmente se vuelve a crear la ventana o sencillamente es que se está destruyendo mal

Bueno, ya nos contarás a ver
Responder Con Cita
  #17  
Antiguo 16-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
Ahi voy con las pruebas

if presu = nil then
presu := Tpresu.Create(Application); <- break point 1
try
presu.Show;
except
FreeAndNil( presu ); <- Break point 2
end;


Al abrirlo la 1ª vez , sin problemas.

Al intentarlo la 2ª cuando le doy a RUN despues de que me de el error el programa se coloca en el break 2

Responder Con Cita
  #18  
Antiguo 16-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
no no, me referia a que pusieras el break en el OnCreate del Form2 (presu). De todas maneras, el error que te da es un Access Violation?

Bueno. Lo acabo de probar y, me da un Access Violation de P.M.

Lo que he hecho para solucionar el problema es añadir una linea al OnClose del Form 2 (lo que pasa es que no se si esto puede afectar a la destrucción de los demas componentes del Form, esto te lo diran mejor otros compañeros que dominan más que yo el tema de objetos)

Código:
procedure TForm2.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
  NeedDataFrm := nil;
end;
Lo he probado y pasa cada vez por el OnCreate del Form2 (que es lo que querías, creo)
Responder Con Cita
  #19  
Antiguo 16-09-2003
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
undeclared intentifier NeedDataFrm
Responder Con Cita
  #20  
Antiguo 16-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
ups, me cole al copiar y pegar, ese el es nombre de mi formulario. Allí tienes que poner el nombre de tu dormulario

Lo siento
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 12:31:30.


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