PDA

Ver la Versión Completa : Abrir MDIChild desde otro


totote
23-09-2008, 15:28:08
Buenas gente del foro :D

Estoy realizado mi primer proyecto MDI, y venia bien hasta que me encontre con este problema. Necesito ejecutar una ventana MDIChild desde otra, pero que la segunda no dependa de la primera sino que dependa del formulario principal.
Les cuento un poco más para que me entiendan.

Los formualrios MDIChild se crean a partir de un formulario base donde tienen todas las propiedades, además tienen un ID interno, y cada vez que creo uno le asigno un ID ques el que le corresponde en un vector del tipo Boolean para saber si está creado o no, esto es para que los formularios se creen solamente una vez y si están creados no lo haga de nuevo sino que lo muestre. hasta ahí vamos bien, porque a cada formulario lo creo desde el formulario principal, el problema surge cuando necesito crear un formulario MDIChild desde otro MDIChild y que dependa del formulario principal, ya que cuando cierro el primer fomulario también lo hace el segundo.

Espero que me puedan entender y ayudar Saludos :D

Caro
23-09-2008, 15:47:44
Hola totote, seguramente cuando creas el formulario lo haces de esta forma:


FormHijo := TFormHijo.Create(Self);
FormHijo.Show;


donde con Self le estas indicando que su dueño sera el formulario del cual lo estas llamando es por eso que al cerrar ese formulario también se cierra (libera) el otro. En vez de Self puedes utilizar Application.


FormHijo := TFormHijo.Create(Application);
FormHijo.Show;


Saluditos

Neftali [Germán.Estévez]
23-09-2008, 15:52:20
...ya que cuando cierro el primer fomulario también lo hace el segundo.

Créalo utilizando como parámetro Owner: Application.MainForm

totote
23-09-2008, 16:14:27
Hola Caro y Neftali, primero gracias por contestar.
Les cuento que buscando un poco mas justo de Parent que me imagino que hace referencia a que el dueño será el mismo que su dueño, probe con los tre (Parent, Application, Application.MainForm) y funciona con los tres, ya que estamos en tema, cual de los tres les parece mejor o mas eficiente.

Saludos y nuevamente gracias por contestar :D

Neftali [Germán.Estévez]
23-09-2008, 16:39:38
(Parent, Application, Application.MainForm) y funciona con los tres, ya que estamos en tema, cual de los tres les parece mejor o mas eficiente.

Eficientes todos, la diferencia está en lo que quieras hacer.

Parent: Estarás asignando el parent del formulario actual como owner del nuevo; En tu caso el parent del primer form, que dependerá de cómo lo hayas creado.
Application: Asigna como owner este objeto.
Application.MainForm: Asignas como owner el form principal de la aplicación.

Al cerrar la aplicación y cerrar el formulario principal creo que van siempre juntos (ahora mismo no se me ocurre otra cosa a no ser que hayas hecho cosas muy raras supongo), de forma que ambas son equivalentes.
El primer puede ser equivalente a los otros dos, dependiendo de cómo hayas creado el primer formulario.

totote
23-09-2008, 16:52:51
Gracias Neftali por la respuesta son cosas para tener en cuenta en el futuro

Saludos

Caro
23-09-2008, 17:00:56
Parent: Estarás asignando el parent del formulario actual; En tu caso el Parent del primer form, que dependerá de cómo lo hayas creado.
Application: Asigna como parent esta clase.
Application.MainForm: Asignas como parent el form principal de la aplicación.


Lo que yo entiendo es que Owner no es lo mismo que Parent, ya que el primero es el dueño o propietario de lo que se esta creando, el cual sera encargado de liberar todo lo que le pertenece cuando este sea liberado, mientras que parent (padre) es un contenedor, pueden llegar a ser el mismo tanto como el Owner o el Parent pero el Parent si nosotros queremos lo podemos cambiar.

Cuando el dueño es Application, una vez que finaliza la aplicación liberara el formulario que te has creado o lo que hayas creado.

Cuando el dueño es Application.Main, una vez que se libere tu form principal se libera también tu formulario si es que no lo has liberado ya.

Con el Parent, la verdad nunca lo habia hecho. ¿Neftali cual llegaría a ser el padre de un formulario, es Application?

Saluditos

Neftali [Germán.Estévez]
23-09-2008, 17:41:12
Lo que yo entiendo es que Owner no es lo mismo que Parent, ya que el primero es el dueño o propietario de lo que se esta creando, el cual sera encargado de liberar todo lo que le pertenece cuando este sea liberado, mientras que parent (padre) es un contenedor, pueden llegar a ser el mismo tanto como el Owner o el Parent pero el Parent si nosotros queremos lo podemos cambiar.

Tienes toda la razón. Al escribir fui poniendo Parent donde quería poner Owner. :o:o:o:o
He corregido en rojo los cambios.


Con el Parent, la verdad nunca lo habia hecho. ¿Neftali cual llegaría a ser el padre de un formulario, es Application?

El Parent de un formulario MDI es nil. Por la tanto el owner del nuevo (si se crea con el parámetro parent) será también nil. No fallará, puesto que esto es posible, sólo que habrá que tener en cuenta cómo se destruye.

Perdón por el lío. :o

Caro
23-09-2008, 18:56:11
El Parent de un formulario MDI es nil. Por la tanto el owner del nuevo (si se crea con el parámetro parent) será también nil. No fallará, puesto que esto es posible, sólo que habrá que tener en cuenta cómo se destruye.


Ahora me ha quedado claro Neftali, muchas gracias por responder ;). Totote si lo haces con el parent, como te dice Neftali tienes que tener en cuenta la parte de la destrucción ya que no habría ningún propietarío que lo destruya o libere.

Saluditos

totote
24-09-2008, 11:58:32
Entonces creo que lo haré con Application.Main.
Gracias por la ayuda :D
Saludos