Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   ¿¿Se puede Hacer?? (https://www.clubdelphi.com/foros/showthread.php?t=61275)

NEG1414 02-11-2008 10:52:58

¿¿Se puede Hacer??
 
Buenas:

Tengo dos formularios uno Padre (fsMDIForm) y un formulario Hijo (fsMDIChild) al que llamo de la manera:

TFormHijo *FHijo = new TFormHijo(this);
//Muestro Form
FHijo->Show();




En el formulario Hijo realizo una serie de operaciones segun el resultado de las cuales al salir

Close()

debo ejecutar alguna funcion en el Formulario Padre...

Ya que el programa a diferencia de una llamada de tipo Modal

TFormHijo *FHijo;
Fhijo = new TFormHijo(this);
//Muestro Form Modal
switch (FHijo->ShowModal())
{
case mrOk:LLamarFuncion() break;

case mrCancel:break;
}




Una vez cerrado el formulario secundario no continua la ejecucion del programa en la linea siguiente a la llamada

Mi pregunta es la siguiente puedo acceder a una funcion del Formulario Padre desde el Formulario Hijo .

Gracias.

escafandra 02-11-2008 13:23:53

Si, puedes obtener un puntero al formulario padre MDI. Para ello el hijo debe tener incluida la definicion.h del padre.

La forma de obtener ese puntero a la clase Padre desde la clase Hijo es:

Código:

ClasePadre* MDI = static_cast <ClasePadre*> (Owner);
Despues con MDI (o el nombre que elijas) accedes a todos los miembros de padre.

Saludos.;)

Lepe 02-11-2008 14:44:24

también puedes application.MainForm en el formulario hijo.

Supongo que el MainForm será tu MDIForm

Saludos

NEG1414 02-11-2008 14:53:28

Muchas Gracias por contestarme

escafandra 02-11-2008 15:56:43

El problema de usar MainForm "a secas" es que es un TForm y no el MDI que buscamos, por eso temenos que hacer un "casting" como el que describo...

Saludos.

Lepe 02-11-2008 17:42:37

Perdón, no me había dado cuenta de un detalle importante. Una ventana mdiChild no puede mostrarse con ShowModal. Obtendrás un error en pantalla más o menos como "Can not make modal a visible window" o algo así.

Si quieres mostrar una ventana como modal, tienes que poner FormStyle a algo distinto a mdiChild (y obviamente distinto de FormMDI, ya que sólo puede haber una en la aplicación).

Si necesitas que una ventana se comporte como mdichild y a la vez mostrarla con ShowModal, aunque se puede hacer, es lioso, yo te aconsejaría usar un frame con todo lo que debe llevar dentro y ese frame, lo pones en 2 ventanas nuevas, una para usarla como mdichild y otra como modal.

Saludos

escafandra 02-11-2008 18:39:03

Tienes razón, Lepe, con tu comentario de MDIChild y ShowModal. Pero creo que la intención de NEG1414 es no mostrarlo como Modal, al menos así lo entiendo de su comentario:
Cita:

Empezado por NEG1414 (Mensaje 323750)
Ya que el programa a diferencia de una llamada de tipo Modal

Creo que hizo ese comentario para que entendiésemos que a la salida quiere que MDIForm haga "algo", y por eso quiere acceder a alguna función desde el MDIChild...

Saludos.

Lepe 02-11-2008 22:13:10

Creo que tienes razón una vez más escafandra, creo leí demasiado rápido ;).

Saludos


La franja horaria es GMT +2. Ahora son las 13:09:23.

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