Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ciclado código (https://www.clubdelphi.com/foros/showthread.php?t=77901)

jocaro 05-03-2012 11:24:55

Ciclado código
 
Hola, en el siguiente ejemplo de código intento cerrar el form principal desde la opción 'salir' del menú y desde la opción de cierre del formulario (aspa superior derecha). Si se ha producido un cambio en los datos, aparece el messagebox, para preguntar si se salvan o no, antes de salir. Una vez contestado si o no, continua el proceso y vuelve a la procedure desde la que se llamo (formcloseclick o menusalirclick) y a presentar el messagebox.

Si alguien me puede ayudar se lo agradezco. No se si estoy usando mal los argumentos de las procedures, si éstas tienen alguna peculiaridad por el hecho de cerrar el form, etc.

Gracias y un saludo

Código Delphi [-]
procedure TSDIAppForm.FormCloseClick(Sender: TObject; var Action: TCloseAction); 
begin 
  VerSiGuardar(Sender); 
  Close; 
end; 

procedure TSDIAppForm.MenuSalirClick(Sender: TObject); 
begin 
  VerSiGuardar(Sender); 
  Close; 
end; 

procedure TSDIAppForm.VerSiGuardar(Sender: TObject); 
begin 
  if btnGuardar.Enabled then 
    if MessageBox(SDIAppForm.Handle, 'La información ha cambiado ¿Desea guardar?', 'Grabar cambios', MB_YESNO ) = IDYES then 
      GrabarBD(); 
end; 

procedure TSDIAppForm.btnGuardarClick(Sender: TObject); 
begin 
  GrabarBD(); 
end; 

procedure TSDIAppForm.GrabarBD(); 
begin { Recoger modificación último registro de tablas editado, por si no se cambia a otro registro antes de grabar (no se recogerían cambios automáticamente) } 
  FrmBasDat.TablaElementosArbol.Edit; 
  FrmBasDat.TablaElementosArbol.Post; 
  FrmBasDat.TablaNotas.Edit; 
  FrmBasDat.TablaNotas.Post; { Grabación en base de datos de los datos de la transacción pendiente } 
  FrmBasDat.ConexionBdSqlite.Commit; 
end;

LoPiTaL 05-03-2012 12:17:20

No entiendo muy bien tu pregunta, ya que realmente no estás preguntando nada, ni dices cuál es tu problema. Si pudieses ser más conciso, te podríamos ayudar mejor.

De todas formas, viendo el código que has puesto, te comento:
· El FormClose se llama cuando se cierra el formulario (desde cualquier sitio), por lo que en esta función es innecesario llamar a la función "Close", ya que YA se había llamado anteriormente, si no, no se habría ejecutado el FormClose.
· En MenuSalirClick SÍ es necesaria dicha llamada, si no, no se cerraría el formulario (obvio...). Sin embargo, ya que cuando haga "Close" llamará a FormClose implícitamente, NO es necesario en esta función la llamada a VerSiGuardar, ya que ya se comprobará en el FormClose.
· Sobre la función GrabarBD no te sé decir nada, ya que no suelo manejarme con bases de datos.

Espero que te sirva.
Un saludo,
LoPiTaL

jocaro 05-03-2012 13:13:03

Gracias por tu ayuda y por tu rapidez.

Con tus comentarios me has solucionado los dos errores que tenía en el código. Éstos provocaban que el messagebox apareciera de nuevo tras cada pulsación sobre las opciones 'si' o 'no', provocando un bucle y que el formulario siguiera abierto.

Un saludo


La franja horaria es GMT +2. Ahora son las 03:48:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi