Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cerrar ventana Showmodal (https://www.clubdelphi.com/foros/showthread.php?t=48805)

Espartaco 04-10-2007 14:27:08

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:
Código Delphi [-]
BitBtn2Click(nil);

o

Código Delphi [-]
BitBtn2.Click;

- 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:

Código Delphi [-]
QDatos.Close;
Close;

La verdad estoy desesperado, probablemente sea una tonteria pero no doy con ella, muy agradecido por vuestra ayuda por anticipado.

gluglu 04-10-2007 14:40:57

Pues no termino de entender tu pregunta.

Por qué no lo cierras por código poniendo directamente
Código Delphi [-]
QDatos.Close;
Close;
donde quieras cerrar esa ventana.

Te debe de funcionar igualmente que si pulsas el boton al que te refieres.

Lepe 04-10-2007 15:26:14

Asigna un valor a ModalResult:
Código Delphi [-]
  Ventana.ModalResult := mrOK;

Saludos

Espartaco 05-10-2007 09:09:37

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.

dec 05-10-2007 09:14:19

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... :)

Espartaco 05-10-2007 09:20:33

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.

gluglu 05-10-2007 10:26:42

Ya se ha comentado varias veces en el foro que en los eventos OnCreate, OnActivate, OnShow ... no se puede cerrar una ventana que se está creando en ese momento.

Busca en el Foro acerca de AfterShow.

Puedes consultar también aqui, aqui y aqui.

Espartaco 08-10-2007 09:04:35

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.

duilioisola 08-10-2007 09:29:07

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)

Espartaco 08-10-2007 11:29:17

Gracias duilioisola, pero no encuentro el evento AfterShow por ningún sitio.

Que

Espartaco 08-10-2007 11:29:56

Gracias duilioisola, pero no encuentro el evento AfterShow por ningún sitio.

Que yo sepa sólo existe el OnShow.

gluglu 08-10-2007 12:16:35

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.

Espartaco 08-10-2007 13:13:05

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 00:41:47.

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