FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Anidacion de Forms
Hola amigos, tengo un problema que me trae de cabeza. Utilizo Delphi 5. La gestion de ventanas en mis programas es crear un form a modo main y despues en las opciones del menu creo el form para ejecutar las opciones que sean, este form es fsnormal y lo muestro con showmodal y luego lo destruyo con free.
Hasta aqui todo bien, si necesito otro form desde este activo lo creo de la misma forma y bien, pero si desde el segundo intento crear un tercero se me cuelga. No se que puede estar pasando. Desde ya muchas gracias. |
#2
|
||||
|
||||
Pues en principio veo tu código bien, No se si me escapa algún detalle, lo digo por que no eres muy específico en el "colgar"
Considero que deberías intentar una prueba simple, abriendo los formularios como lo indicas, pero sin activar la BD
De esta manera podría detectar si el problema está al activar tu BD, que al cargarse puede estar realizando alguna operación o consumiendo recursos... También podría suceder que en el mismo oncreate o en el onshow esté realizando operaciones con recursos compartidos con los formularios gemelos... Bueno, no se que mas decirte... Por ultimo, te recomendaría (sugerencia personal) que revisaras la activación de la BD en el OnCreate del propio formulario... Otra sugerencia sería que destruyeras el formulario en el evento OnClose, algo asi:
Con ésto aseguras que cada vez que cierre el formulario se libera la memoria... saludo, |
#3
|
||||
|
||||
gracias gatosoft por tu rapida respuesta, decirte que tras varias comprobaciones he comprobado que el 'cuelgue' se realiza tras ejecutar la linea que crea el form, no da lugar ni a abrir la tabla, es mas he hecho lo que me dices y igual. Cuando digo cuelgue me refiero a que la aplicacion no responde a nada teniendo que usar el administrador de tareas para pararla. Emiezo a pensar que es que Delphi 5 no permite anidar mas de dos form, porque no encuentro otra explicacion la verdad. Estoy desesperado, tengo que entregar la aplicacion y me ha surgido esto. Espero que le haya pasado a alguien y lo haya solucionado.
Muchas gracias. |
#4
|
||||
|
||||
Si llamas al 3º form desde el 2º form, y destruyes el 2º form cuando llamas al 3º form... me parece que... tenemos un problema
|
#5
|
||||
|
||||
No claro, la llamada al tercer form desde el segundo se hace antes de destruirlo. El proceso es ejecuto el primero, en un proceso de este se llama al segundo y en un proceso de este se llama al tercero, cuando se cierre el tercero se destruye, y cuando se cierre el segundo se destruye. El caso es que cuando son solo dos no hay ningun problema, solo me ha surgido al llamar al tercero y es lo que no entiendo.
Gracias por vuestra ayuda e interes. |
#6
|
||||
|
||||
Creo que no entiendo cómo lo haces. ¿Puedes poner el código?
|
#7
|
||||
|
||||
Por supuesto.
Este es el codigo que llama al 1º form desde el menu principal:
Dentro del form TModificarCarga llamo al 2º cuando pulsamos el boton modificar carga:
Dentro del form TModificarAlbaranCArga llamo al 3º form cuando pulso el boton añadir marcar:
Al ejecutar la linea para crear el 3º form es cuando se cuelga. Espero que te lo haya aclarado es muy importante para mi resolverlo lo antes posible. Gracias. |
#8
|
||||
|
||||
Hola Espartaco.
Lo único que podría estar provocando el error, pero desconozco su locación, es la línea:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#9
|
||||
|
||||
Hola ecfisa, el dbgrid1 pertenece a la 1º form y esa linea no se ejecuta hasta que no se cierra el 2º form. Por tanto el error no se genera ahi. De hecho el 3º form no llega a crearse, el cuelgue es precisamente en la creacion.
Gracias. |
#10
|
||||
|
||||
Hola Espartaco.
¿ Y escribiste algún código en el evento OnCreate de TElecMarca ? Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#11
|
||||
|
||||
No ecfisa de hecho ese form lo utilizo tambien desde otro form y no me da problemas porque es el 2º en la secuencia de apertura de forms. Pero cuando es el 3º entonces caput.
De hecho lo uso en TCrearAlbaranCarga y va sin problemas. No se tu has probado a abrir un form desde otro y luego un tercero? a ver si te da el mismo problema? Porque yo no lo entiendo. |
#12
|
||||
|
||||
Entonces en el 3º form no tienes ningún código, está vacio.
|
#13
|
||||
|
||||
Hola Espartaco.
Cita:
Acabo de generar el código de los cuatro formularios en juego (usando tu codigo de creación y liberación) y funciona correctamente en Delphi 7. Te adjunto la prueba por si te sirve de ayuda. Saludos Edito: Quité el adjunto por estar sin visitas.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 25-09-2014 a las 15:06:49. |
#14
|
||||
|
||||
Hola Espartaco... primero, considero que no deberias hablar de anidar formularios, pues no creo que este concepto aplique en lo que estas haciendo... de hecho, no se si ese concepto exista realmente
tu sencillamente estas creando formularios, uno tras otro con cada click de boton, como dice eficsa no deberia haber problema... Como dije inicialmente, no veo problema en tu lógica... el tema debe estar en el evento OnCreate/Onshow del tercer formulario (TElecMarca)... busca aislarlo (abrirlo antes que los demás), busca abrirlo en un segundo lugar, en ligar de un tercero... si pasa todo bien .... quiere decir que entre tanta apertura de tablas puede estar sucediendo algo que bloque un proceso... me refiero a que con Bases de datos como Paradox, por ejemplo, se pueden generar bloqueos al intentar hacer varias operaciones sobre la misma tabla... ¿Que base de datos utilizas?, ¿Manejas algún evento al abrir tus tablas?, ¿que componentes de conexión utilizas? el mensaje es que definitivamente debe haber algo que se genera en un EVENTO... y no podemos ayudarte mucho pues estamos ciegos porque no tenemos el contexto de tu aplicación intenta poner un breakpoint en la linea que genera el error... cuando llegues ahí, avanza paso a paso con F7 y revisa por donde se va tu codigo al llegar a esa linea... |
#15
|
|||
|
|||
Por aportar algo... ¿estas seguro de que se te cuelga? No puede estar pasando que al último form que creas se te muestra por detras de los que estas viendo y que al mostrarlo como modal no puedas pulsar en ningún otro? Has probado ir al administrador de tareas y pulsar con el boton derecho sobre la aplicación diciendole que lo traiga al frente?, otra forma es cambialre la posición al form en el onshow para que se te ponga en una esquina.
|
#16
|
||||
|
||||
Ole, Ole, engranaje has dado en el clavo, el form estaba detras del que lo llamaba, pero no se como se ha podido cambiar la propiedad FormStyle de StayonTop a Normal ya que siempre la uso y en la otra parte del programa estaba bien.
Tienes razon gatosoft le mal llamo forms anidados cuando no lo son, sorry. Bueno solucionado, muchas gracias a todos por vuestra ayuda e interes, con un foro como este se siente uno muy acompañado. Saludos desde Sevilla. Última edición por Espartaco fecha: 25-09-2014 a las 12:46:36. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda en anidación de transacciones | crcmartell | Conexión con bases de datos | 1 | 04-01-2008 08:05:11 |
Cursores y anidación de procedimientos almacenados | david.rguez | SQL | 1 | 02-08-2007 17:06:31 |
MDI Forms | karocs | Varios | 8 | 12-07-2007 16:38:03 |
dll con forms | Rafa | Varios | 10 | 15-02-2005 20:43:11 |
Forms.....por fa | buitrago | Varios | 1 | 19-11-2003 22:42:52 |
|