FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Confirmación de cerrar ventana.
Hola.
Tengo la ventana principal de la aplicación en vcl, la cual quiero que cuando den al botón de cerrar la ventana, me salga una segundo form que diga: si está seguro de salir del programa. Tengo los dos forms pero que tengo que hacer para llamar a ese segundo form al dar al botón de cerrar (X) y desde donde? Y en el segundo form tengo dos botones. Uno que sería el "si" que cierra los dos forms y sale del programa y otro con "no" que cierra solo el segundo form y se mantiene en el programa en el form 1. Gracias. |
#2
|
||||
|
||||
Usa el evento OnCloseQuery del primer formulario para llamar al segundo. Por otra parte, quizá no lo sepas pero no es necesario usar un segundo formulario para preguntar al usuario ya que puedes hacer uso de la función MessageBox de la API de Windows:
// Saludos |
#3
|
|||
|
|||
CloseQuery
Hola Roman. Prefiero hacerlo con otro form que lleva iconos y logotipo.
En el Form 1, en evento doy doble click en CloseQuery. Me sale en el code: procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin Form3.ShowModal; end; Después del begin pongo Form3.ShowModal; Está bien? En el form principal tengo varios botones y uno de ellos es salir. Cuando doy al botón llamo al Form3 que es el mismo que llamo con el CLoseQuery dando a cerrar (x) de la ventana principal. Funciona. De las dos maneras sale el Form3. En el Form3 tengo los botones de si y no. Primero estoy haciendo el no. code: procedure TForm3.Button2Click(Sender: TObject); begin Close; end; He puesto close; está bien? Lo que tiene que hacer el form3, boton de no, es cerrar solo el form3. Cuando el Form3 se abre desde el botón de salida del form principal, funciona, se cierra sólo el Form3. Pero si el form3 se abre por darle a la (X) cerrar del Form principal, al darle al botón de no del Form3 se cierra el form3 y el form principal, los dos, y tendría que cerrarse sólo el form3. Que hago mal? Gracias.- |
#4
|
||||
|
||||
En principio no debería haber diferencia pero vamos a organizarlo mejor.
ShowModal es una función y es su valor de regreso lo que debes examinar en el OnCloseQuery del form principal:
No necesitas programarle nada a los botones de Form3. En su propiedad ModalResult pon mrYes para el botón "SÍ" y mrNo para el botón "NO". Cuando presionas uno de ellos, el formulario Form3 se cierra y ShowModal regresa el valor de la propiedad ModalResult del botón oprimido. (Un formulario modal se cierra automáticamente en cuanto su propiedad ModalResult, que se establece por los botones, es distinta de cero, mrNone). // Saludos |
#5
|
|||
|
|||
Hola Roman gracias por la ayuda.
El code del form principal queda así: procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := (Form3.ShowModal = mrYes); end; Y he quitado la programación de los botones del form3. Les he puesto en el modal result mrYes para el botón si y mrNo para el botón no. Lo he probado y cuando cierro la ventana principal con la X salta el form 3 y funcionan correctamente los dos botones. El no solo cierra el form3 y el si cierra el form3 y el form1. Pero cuando doy al botón salir del principal form, salta el form3 (bien) y le doy al botón no y funciona correctamente, se cierra sólo el form3, pero le doy al botón si y sólo se cierra el form3 y el form principal no se cierra. En teoría tiene que cerrar los dos. Hay algo que hago mal? tengo que poner algo más? Gracias otra vez. |
#6
|
||||
|
||||
Cita:
Quizá alguna otra cosa esté afectando. Prueba hacerlo en un proyecto vacío. // Saludos |
|
|
|