![]() |
Cerrar ventana Showmodal
Hola Foro, de nuevo tengo un problema y recurro a vosotros.
El problema que tengo es que necesito cerrar una ventana que he abierto con ShowModal, pero necesito cerrarla sin la intervención del usuario. He mirado por el foro, y a pesar de que hay mucho sobre eso he probado un montón de soluciones que he encontrado y no me ha valido ninguna, entre ellas: - Provocar el click al boton de Salir, pero se rie de mi. Ej:
o
- Tambien he probado con FormDeactivate y me da un error de violacion de memoria. - Este error de violacion de memoria me lo da cuando intento cerrar la ventana por cualquier medio que no sea pinchando en el boton de salir que tiene asocioado del siguiente codigo:
La verdad estoy desesperado, probablemente sea una tonteria pero no doy con ella, muy agradecido por vuestra ayuda por anticipado. |
Pues no termino de entender tu pregunta.
Por qué no lo cierras por código poniendo directamente donde quieras cerrar esa ventana. Te debe de funcionar igualmente que si pulsas el boton al que te refieres. |
|
Gracias por contestar tan rapido, intentaré ampliar la información que puse en un principio.
Se trata de que la ventana showmodal en para introducir datos. En el evento OnActivate de la misma compruebo si se cumple una condición para poder seguir introduciendo esos datos. Si la condición es verdadera pues tengo que cerrar la susodicha despues de mostrar un mensaje informativo. He probado a cerrarla desde ese evento y me da error de acceso de memoria, tambien lo he intentado desde OnShow, igual; tambien lo he intentado desde el evento OnEnter del primer edit de la ventana, tambien el mismo error, todo esto con las soluciones que puse en un principio y con la solucion de Lepe. Con la solucion de gluglu no me hace ni p... caso, solo funciona en el evento OnClick del boton de salir. He probado también hacer esa comprobacion antes de crear la ventana, y si se cumple la solucion no la abro desde el menu principal, pero he observado una cosa muy rara y tras muchos intentos desisti de esa opcion que me parecia la mejor. La cosa rara es que para comprobar esa condicion lo que tengo que hacer es ver si existe un determinado articulo en una determinada tabla. Coloco la tabla en la ventana principal y ejecuto un locate, y sorpresa es como si el locate funcionara cuando quiere es decir erroneamente, pero ojo siempre funciona de la misma forma erronea, es decir, si dice que no existe un articulo (y sí existe), siempre dice lo mismo. Espero que se entienda bien el mensaje y siento que sea tan largo, pero de verdad he probado todo lo que se ma ha ocurrido y nada. Muchas gracias por atenderme. |
Hola,
No parece que tengas que mostrar un formulario para comprobar acto seguido si no puede mostrarse o no... ¿No te parece más lógico (oh, cómo me gusta esta palabra), digo, comprobar "la condición" y mostrar o no el formulario dependiendo de esta? Yo creo que sería menos problemático, ¿no? Y más lógico... :) |
Hola Dec,
Efectivamente llevas razón, y eso fue lo que intenté primero, pero si miras mi anterior mensaje explico que al hacerlo, sin saber por qué, el locate hacía cosas raras y opté por hacer la comprobación después, ya que así no tengo problemas con el locate. Incluso miré a ver si el problema estaba en el BDE del servidor de archivos donde tengo ubicadas las tablas, pero creo que ahí no estaba el problema. Ah, se me olvidaba son Paradox, ya sé que tienen problemas en red pero tengo bastante prisa. Una cosa, aunque las tablas están en otro ordenador, el programa está funcionando de momento en monousuario. Gracias. |
|
He mirado los links que pone gluglu, pero realmente no me solucionan el problema.
Me aguantaré como lo tengo, que es desactivando el botón de grabar de la ficha para que el usuario cierre la ventana manualmente. Muchas gracias a todos por haberos molestado en ayudarme. Ciertamente con este foro no te sientes solo. |
Una idea de parche :
Crea una variable global al form en cuestión que se llame Cerrar y sea boolean. Si la condición que chequeas debe cerrar el form, la pones a True. En el AfterShow, si Cerrar=True le dices que cierre el form. (close / ModalResul:=mrOk) |
Gracias duilioisola, pero no encuentro el evento AfterShow por ningún sitio.
Que |
Gracias duilioisola, pero no encuentro el evento AfterShow por ningún sitio.
Que yo sepa sólo existe el OnShow. |
El AfterShow no es un evento del Form, ni de ningún otro control.
Es un método que se explica en los hilos que te mencioné anteriormente. Es una manera de ejecutar algo después de que el Form haya creado todos los controles, se haya activado, y se muestra en pantalla. Se le ha puesto ese nombre como se le podía haber puesto cualquier otro (p.ej. 'DespuesDeMostrar'). Si lo crees oportuno, vuelve a revisar los hilos que expuse más arriba y creo sinceramente que te debería de servir. Si tienes alguna duda adicional, puedes volver a preguntar sin problema. |
Gracias gluglu, volveré a mirar los links e intentaré implantar lo que me dices, lo que pasa es que hoy ya no puedo hacerlo, en cuanto lo intente os cuento.
Gracias de nuevo. |
La franja horaria es GMT +2. Ahora son las 21:56:02. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi