Ir al contenido


Foto

[RESUELTO] Que evento se dispara después de cerrar MDIChild???


  • Por favor identifícate para responder
4 respuestas en este tema

#1 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 02 octubre 2009 - 01:05

Saludos, alquien sabe que evento se dispara en un MDIForm cuando cierro un MDIChild sin que sea el OnPaint.

El OnActive, se ejecuta hasta que le doy clic al MDIForm y yo quiero uno que estando en el MDIChild y presionar el boton salir se valla a un evento del MDIForm si tocarlo antes...
:huh: :huh: :huh:

  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 03 octubre 2009 - 05:32

No se si te entiendo bien. ¿Tratas de saber desde el MDIForm cuando un MDIchild se cierra?. Si es así, yo simularía un evento o provocaría un evento definido para eso:

Se me ocurre que el MDIChild que se está cerrando, llame a una función miembro que defines y creas en el MDIForm pasándole un parámetro del child (Handle, por ejemplo o el que precises). Esa función sería llamada desde el evento OnClose del MDIChild que se está cerrando. La desventaja es que esa llamada se produce entes del cierre real y no terminará éste hasta la vuelta de la misma.

Otro método es que el MDIChild pase al MDIForm un mensaje del rango WM_USER, de esta forma el MDIChild no esperaría para continuar su cierre.

También puedes realizar un escaner de los MDIChild en un bucle controlado por MDIChildCount, y ver cual falta, pero claro que esto ya se parece mucho menos a un evento.

Saludos.
  • 0

#3 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 04 octubre 2009 - 09:25

Saludos y gracias escafandra, si fijate que intenté hacer algo como me comentas, realmente lo que quiero es, (digo a lo mejor un poco descabellado), que mi MDIForm, sepa que hijo se cerro, esto sin que "el hijo sepa quien es el padre", es decir no quiero incluir el MDIForm en el MDIChild.

Dándole varias vueltas al asunto hice una trampilla, me cree una unidad que esta si pueden tener ambas formas, en esta unidad cree una variable, que en la forma padre la igualo a una property del MDIForm y desde el MDIChild la modifico y se actualiza la propiedad del MDIForm como si la estuviera afectando directamente desde el MDICHild, de esta forma le digo que "Yo (forma tal) ya me voy a cerrar o ya me cerré y el property del MDIFOrm realiza lo necesario para mostrarle al usuario que ya se cerro tal forma.

Trampilla de alguna manera, pero funcional, no sé si alguien había visto esta opción.

Saludos y gracias por contestar.
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 05 octubre 2009 - 12:14

Aunque lo tengas solucionado con tu "trampilla", me hago una reflexión, aunque sólo sea un ejercicio dialéctico:

... que mi MDIForm, sepa que hijo se cerro, esto sin que "el hijo sepa quien es el padre", es decir no quiero incluir el MDIForm en el MDIChild.


Un hijo siempre sabe quien es su padre. La propiedad Parent apunta a la ventana padre. Bien es verdad que el hijo no sabe, en un principio, "como es su padre", pues Parent es una clase base de TForm y por lo tanto de tu MDIForm. Pero nada te impide enviar mensajes o notificaciones Windows a Parent.Handle, por lo que sin "trampillas" y sin incluir el MDIForm en el MDIChild podrás hacerlo.  :D Y desde el punto de vista de Win32 queda mas elegante, aunque sobre lo que es o no elegante daría mucho de que hablar.

Saludos.
  • 0

#5 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 07 octubre 2009 - 08:29

Efectivamente amigo escafandra, lo que sucede que tanto el MDIForm como el (los) MDIChild son heredados de unas clases bases que tengo, es por eso, mucho código se los dejo a las clases bases y como no se pueden ver estas clase porque de hecho las tengo en bpls diferentes, por eso la pregunta, creo que a lo mejor no supe explicarme, pero pude resolver esto con el truquillo antes mencionado.

Gracias por la reflexión y por el post que de cierta forma ayudo a aclarar mis ideas.
  • 0




IP.Board spam blocked by CleanTalk.