Problema al asignar valor antes de visualizar el form
Hola a tod@s
Tengo un problema con un form. Tengo un form MDIChild que llamo desde distintos sitios. Para distinguir desde donde lo llamo utilizo la propiedad tag del form, asignandole un valor distinto segun llamo al form. Lo hago así:
Luego consulto el valor de la propidad tag y segun sea cambio los iconos de los botones (uso una toolbar) con el siguiente código:
El problema es que ponga donde ponga este código no funciona, siempre me entra en la primera parte del if sin haber cambiado el valor del tag. He probado en los eventos OnCreate, OnActivate y Onshow (Yo creo que tiene que ir aquí) pero no funciona en ninguno. Primero se ejecutan los eventos y luego se asigna el valor de la propiedad tag, por lo que no se me ejecuta bien el código. ¿Alguna sugerencia? |
Prueba a quitar el with, o ponerlo así
|
Gracias por responder.
He probado lo que sugieres y nada. Se ejecuta antes el evento OnShow que la asignacion de la propiedad tag. |
Hola, en el Onshow debería funcionarte, como te dice defcon1, al parecer se esta confundiendo con el Tag del form Actual, pero también podrías utilizar el Owner del formulario, osea su propietario solo cambiaría la forma en que estas creando el formulario.
y cuando quieras saber el propietario solo preguntas por el Owner, lee este hilo http://www.clubdelphi.com/foros/showthread.php?t=62380 y otra parte que debes considerar es lo que dice el amigo Lepe en el mensaje 6 de ese mismo hilo. Saluditos |
Otra vez, gracias por las respuestas.
He probado el código como ha dicho Caro:
Y me da el error: Código:
Project GestionArchivo.exe raised exception class EAccessViolation with message |
Cita:
Creo que la forma puede ser utilizando un evento del tipo AFTERSHOW y creárselo al formulario MDI. Aquí tienes un ejemplo de cómo hacerlo, aunque si buscas en los foros, también hemos hablado del tema. |
Hola de nuevo, es verdad pasa lo que indica Neftali sobre el form MDIChild y no me había dado cuenta, pero insisto no sería mas facil utilizar el Owner del formulario, ahora sobre el AccessViolation que te sale es porque estas tratando de acceder a un objeto que no ha sido creado, el codigo que te puse no debería darte error, ejecuta paso a paso e indicanos en que línea te sale el error, ahora si utilizas el Owner ya no necesitas asignar el Tag, directamente podrías hacer esto.
Saluditos |
|
Cita:
Esa solución también es buena y debería funcionar. Personalmente me gusta utilizar AFTERSHOW, ya que es útil para otras cosas, pero esta solución de Caro te permitirá hacerlo sin codificar nada de código extra. |
Cita:
Ya sabía yo que habíamos hablado del tema. A este me refería. |
Hola otra vez.
El error me lo da justo al crear el formulario. Estoy intentando probar lo del owner, pero es una propiedad que no he usado nunca, y estoy a ver si lo consigo. Por otro lado, pregunta he estado viendo lo del aftershow, pero creo que no lo he entendido bien, no es un evento como tal ¿No?. ¿Tengo que definirlo yo? Podeís aclararme algo más sobre esto. |
1 Archivos Adjunto(s)
Aquí te paso un ejemplillo, con ambas maneras de hacerlo. Utilizando el evento AfterShow para detectar diferente TAG (con el que se llama) y también poder detectar desde un formulario cual es el Owner de quien lo llama (en este caso dos posibles formularios o Application).
Supongo que el ejemplo será más clarificador. Cita:
El el caso del AfterShow, lo que estamos haciendo en desde el propio Show del formulario (Román utiliza el evento OnShow, a mi me gusta más utilizar el DoShow) lanzar un mensaje a la cola de mensajes de Windows, que capturamos en el propio formulario. Con ese mensaje que capturamos ejecutamos el procedimiento AfterShow. |
Gracias, sigo probando ...
|
Y serviria usando el Sender del objeto que abre el formulario? :rolleyes:
|
Cita:
|
Bueno, tal vez no entendi bien la pregunta con lo del llamado de diferentes sitios.
Me imagino que es que lo abres con una opcion de menu o con un boton de una ToolBar Si es asi, funciona usando el sender
En este caso lo hago cambiando el caption de un label, pero puede servir tambien para modificar cualquier objeto del formulario antes que se abra Si los sitios desde donde mandas a abrir el formulario no son esos, entonces detallame mejor desde donde lo haces. O donde esta la imagen que quieres cambiar? en form1 o en fSalidas |
Cita:
Sobre tu pregunta, la imagen que quiere cambiar esta en FSalidas que cambia según al formulario que lo llama. Saluditos |
Cita:
El problema es que es ecódigo funciona como se espera con formularios normales. Si en el OnShow del formulario 2 colocas el código:
Verás que para cada opción aparece un caption diferente. Pero no así si son formularios MDI, ya que el OnShow se ejecuta directamente desde el create antes de poder hacer las asignaciones. Más bien el problema no es asignar los valores, sino en qué eventos "rescatarlos". |
Ok, ahora si ya entiendo lo que quiere hacer el amigo drykea
Tengo que pensar un poco mas, en concreto es buscar en que evento poner el codigo para que funcione bien :rolleyes: |
Cita:
|
Muchisimas gracias a todos por vuestras respuestas.
Se que he tardado un poco en volver a escribir, pero estaba haciendo pruebas y ademas me he cogido unas minivacaciones:D Bueno a lo que iba. He estado probando y he conseguido que me funcione utilizando el Aftershow. Con lo del owner, no he sido capaz de quitar el error que me daba al crear el documento:( Pero bueno, he conseguido lo que queria, muchisimas gracias otra vez... |
La franja horaria es GMT +2. Ahora son las 06:26:35. |
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