Ver Mensaje Individual
  #1  
Antiguo 06-02-2018
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Reputación: 17
Neeruu Va por buen camino
Cool Crear y Destruir Formularios - Forma Correcta

Hola a Todos...

Capaz esta pregunta ya esta contestada en el foro, la busque pero no encontré...


Mi pregunta es la siguiente:
Cual es la manera correcta de crear un formulario?

Planteo el escenario:
  • Tengo una aplicación mdi que tiene su menú principal donde llama a los distintos form que se crean a demanda.
  • Ahora cuando hago click en un item del menú se va a crear un FormX.

  • Ahora cual es la forma correcta:
    1. Definir una variable del Tipo TFormX y Crear el Fomulario.
    2. Utilizar la variable que automaticamente se crea con el Form (FormX:TFormX)

Para Cerrar el formulario , tengo un ToolBar con un TWindowClose.
Pero este no asigna Nil a la variable FormX. ¿Lo correcto seria que asigne nil a la variable FormX en el evento destroy?

Y Porque en el Create de un Form, la Variable FormX es igual a Nil pero Self no? Cual es la diferencia?

Ahora voy a contar porque me surgen estas dudas...
Tengo una app con casi 300 formularios. en la mayoria de los formularios, en el create del mismo llamo a un procedimiento que me pinta los componentes de x color.
Hasta acá sin problemas. Pero resulta que ahora he tenido que agregar nuevos formularios y se da que aveces abro este form nuevo (FormX) y en el procedimiento que pinta los componentes me arroja un access violation. O se me da que abro un determinado form y luego el FormX y arroja el AV.

Llevo mas de una semana tratando de encontrar el porque con estos nuevos formularios se produce el error y no encuentro. Ya cree un proyecto nuevo, probé en otra pc, hice los formularios desde 0... Y nada el error persiste...

Entonces empece a ver mas detalladamente y note que (Yo siempre utilice la variable Form, que crea automáticamente el formulario) la primera ves que entra el formulario al procedimiento que pinta FormX = Nil, ahora la segunda vez ( Osea, lo cierro con el botón de cerrar TWindowCloe) y si lo abro de nuevo FormX tiene cosas adentro, no viene con Nil.

Puse FormX := Nil en el evento destroy del FormX y el problema se soluciono.
Ahora me queda la gran incógnita y es lo que me come la cabeza, de porque el error solo con esos formularios.

Llegue a pensar a al pasar algún tamaño de ejecutable o uso de memoria a lo mejor cambia la administración y por eso surge ahora el error.. la verdad no se...
Y por eso es que viene mi pregunta... ahora estoy pensando que a lo menor la forma en la que estoy creando y destruyendo los formularios no es la correcta, aunque esto no me responda porque en 299 Formularios no da el error y en el 300 si...(Puse estos mismos formularios en proyectos aun mas grandes y el error no se da)
__________________
Saluda Atte Neeruu!!! :)

Última edición por Neeruu fecha: 06-02-2018 a las 22:37:35.
Responder Con Cita