Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-10-2007
gabrio gabrio is offline
Miembro
 
Registrado: sep 2007
Posts: 19
Poder: 0
gabrio Va por buen camino
Red face ¿Quien es mi Form Padre?

Hola amigos de la Comunidad:

Tengo un formulario principal que es normal no MDI. En este formulario tengo un menú y cuando llamo a alguna opción de éste, quiero abrir una ventana MDI con sus respectivas hijas

Esto lo hago sin problemas, pero cuando llamo a las hijas de este MDI, me da el error de 'No MDI Form are Currently active'.

Mi pregunta es:

¿Como le especifico al formulario hijo que se abra en un MDI específico?, algo así como: 'Tu padre es este...'

Desde ya, muchas gracias
Responder Con Cita
  #2  
Antiguo 16-10-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Pues si la cosa esta como dices deberia funcionarte correctamente, de todas formas ¿Te funciona asi al crear el formulario en ejecución?

Código Delphi [-]
FormHijo := TFormHijo.Create(ForumularioPadre);
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 16-10-2007
gabrio gabrio is offline
Miembro
 
Registrado: sep 2007
Posts: 19
Poder: 0
gabrio Va por buen camino
¿Quen es mi Padre?

Asi es, mira, en el Menú principal tengo:

Código Delphi [-]
procedure TPrincipal.AbrePadreClick(Sender: TObject);
begin
 Padre := TPadre.Create(Application);
 Padre.Show;
end;

'Padre' es MDI y se crea perfectamente y dentro de éste:

Código Delphi [-]
procedure TPadre.AbreHijoClick(Sender: TObject);
begin
 Hijo := THijo.Create(Padre);
 Hijo.Show;
end;

Y me manda el error de 'No MDI are currently active'

¿Estoy haciendo algo mal?
Responder Con Cita
  #4  
Antiguo 16-10-2007
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
Hola Gabrio,

Todos los formularios tienen un array que almacena los Formularios hijos que pueda tener: MainForm.MDIChildCount

Puedes recorrerlo asi:

Código:
  

var
 
VariableTipoTFORM: Tform;

for i:= 0 to MainForm.MDIChildCount-1 do
  begin
     VariableTipoTFORM:=   MainForm.MDIChildren[i];      
  end;//For
Una vez tienes un objeto instanciado en la variable (VariableTipoTFORM), puedes trabajar con ella, por ejemplo, preguntando su nombre, tipo, caption, color, etc.

Quiero aclararte que en el codigo de ejemplo que pones el parametro que se pasa en el método create, no es precisamente el padre del objeto.

Código:
Hijo := THijo.Create(Padre);
Es el OWNER o propietario... el Propietario se define para saber quien es el que se encarga de liberarlo de memoria...

La moyoria de lso objetos tienen una propiedad llamada Parent (este si es el padre)...

Lo normal sería que pudieras hacer esto:

Código:
FormHijo.parent:=FormPadre
Pero los ObjetostForm no tienenn un Parent y por eso se utiliza el array que te mencioné....

Por Otro lado una aplicación solo puede tener un Formulario tipo MDI Y al crear un Formulario tipo MDIChild, el compilador lo asigna automáticamente al unico MDI que debe haber...

No tengo un Delphi a la mano para reproducir tu error, pero deberia funcionarte, a menos que al crearse el formulario no lo este haciendo como tipo MDI, o que exista una restricción adicional en Delphi que Obligue a que el MDI sea siempre el Form Principal... Entiendo que tu Form MDI no es el principal....


Bueno, son solo ideas, revisa y nos cuentas...
Responder Con Cita
  #5  
Antiguo 16-10-2007
gabrio gabrio is offline
Miembro
 
Registrado: sep 2007
Posts: 19
Poder: 0
gabrio Va por buen camino
¿Quien es mi padre?

Ok, desde el Padre, hago lo siguiente:

Código Delphi [-]
procedure TPadre.LlamarClick(Sender: TObject);
begin
 Hijo:= THijo.Create(Application);
 Hijo.Parent := Padre;
end;

Funciona, pero el efecto visible no es lo mejor, esto debido a que cuando el formulario se crea, se muestra al centro, luego, al cambiar el Parent, se visualiza dentro del Padre, dando un efecto como de aparición - desaparición.

Intenté esto:

Código Delphi [-]
Hijo := THijo.CreateParented(Padre.Handle)

Pero al cerrar el Formulario Principal, lanza un error que dice más o menos: 'El Identificador de la Ventana no es válido'. Y estoy casi seguro que esto es porque no se libera de memoria al hijo desde el padre.

¿Otra Idea?

Gracias por tu excelente explicación y consejos gatosoft
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
continuacion a ¿quien llamo a mi form? FGarcia Varios 3 19-06-2007 23:50:44
Voy a ser Padre ContraVeneno La Taberna 28 10-01-2007 18:17:43
Enviar datos al form padre ANG4L Varios 9 18-05-2006 00:42:07
¿Quién llamó mi form? dape OOP 7 13-04-2006 02:24:59
No aparecn las propiedades Published de un form Padre bataola OOP 6 09-08-2005 19:58:52


La franja horaria es GMT +2. Ahora son las 08:18:54.


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
Copyright 1996-2007 Club Delphi