Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cancelar cerrar form (https://www.clubdelphi.com/foros/showthread.php?t=62209)

odrack 10-12-2008 23:02:29

Cancelar cerrar form
 
Saludos compañeros!!

Nuevamente pidiendo ayuda de ustedes :D, tengo una aplicación donde realizo notas de venta, esto trabaja bien, la duda que tengo es ¿como puedo impedir que se cierre el form una ves que he presionado el boton de cerrar (en la parte de border icons, en la X) si tengo una nota de venta abierta?, he hecho una validación en el evento onClose pero aun asi no me respeta mi validación.

Pongo un fragmento de codigo para que vean el procedimiento que utilizo
Código Delphi [-]
  if button3.Visible=false then
    begin
      showmessage('Debes cerrar tu nota de venta antes de salir');
    end
  else
    begin
       form1.close;
    end;

dec 10-12-2008 23:14:01

Hola,

Puedes usar el evento "OnCloseQuery" del formulario. Este te pasa por referencia el argumento "CanClose", de modo que si le das el valor "True", el formulario se cerrará, y si es "False", el formulario no se cerrará.

Fenareth 10-12-2008 23:14:28

Hola odrack !

No puede ser que al mostrar la ventana de tu nota de venta la abras como Modal ?

Es una idea :p :)

Delphius 10-12-2008 23:17:22

Debes emplear el evento OnCloseQuery, y altervar el valor de la variable CanClose dependiendo de la condición.

Por ejemplo, siguiendo tu ejemplo:
Código Delphi [-]
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := NOT Button3.Visible;
end;

La variable CanClose determina si puede o debe cerrarse el form. En el ejemplo, si el botón3 está visible, no lo cierra. En caso de no estar visible se cierra.

Saludos,

Caro 10-12-2008 23:17:40

Hola, debes colocar el Action de tu evento OnClose en caNone.

Código Delphi [-]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if button3.Visible=false then
    begin
      Action:=caNone;
      showmessage('Debes cerrar tu nota de venta antes de salir');
    end;

Saluditos

odrack 10-12-2008 23:24:36

Gracias a todos por el apoyo!!:p

He probado de las dos formas tanto de Delphius y Caro y me han funcionado ambas, me faltaba la instruccion para cancelar el cierre, Action:=caNone;

Con esto es caso cerrado!!, jeje :D


La franja horaria es GMT +2. Ahora son las 15:53:59.

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