Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-02-2004
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Exclamation Problemas con formularios MDI, AYUDAAA!!!

Saludos,

Mi problema es que tengo una aplicacion que al arrancar autocrea dos formularios, el principal es un formulario de acceso y el otro es el formulario del menu principal. El formulario del menu principal es un formulario MDI, es decir tiene la propiedad FormStyle := fsMDIForm, y este formulario tiene una opcion de menu que llama a otro formulario de prueba creandolo con Application.CreateForm(); este otro formulario tiene por supuesto la propiedad FormStyle := fsMDIChild, y entonces cuando se crea este ultimo formulario viene el error'Cannot create form. No MDI form are currently active'.

Como puedo solucionarlo???

Gracias de antemano.

Última edición por Repelus fecha: 21-02-2004 a las 18:06:20.
Responder Con Cita
  #2  
Antiguo 21-02-2004
maruenda maruenda is offline
Miembro
 
Registrado: oct 2003
Ubicación: elche
Posts: 173
Poder: 21
maruenda Va por buen camino
Thumbs down espero que te sirva

mira yo lo hago de esta manera.
mi formulario tfbancos tiene la propiedad formstyle a fsmdichild.

NUEVOBANCO:tfBANCOS;
begin
nuevobanco:=tfbancos.Create(self);
nuevobanco.Top:=0;
nuevobanco.Left:=0;
nuevobanco.show;

end;

espero te sirva. un saludo.
__________________
frenadol
Responder Con Cita
  #3  
Antiguo 21-02-2004
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Perdona pero debo de ser muy torpe sabes y no entiendo que quieres decirme con el código que has puesto.

Podrías ser un poco mas precisa???

Y perdona e este novato.
Responder Con Cita
  #4  
Antiguo 21-02-2004
maruenda maruenda is offline
Miembro
 
Registrado: oct 2003
Ubicación: elche
Posts: 173
Poder: 21
maruenda Va por buen camino
Thumbs down te aclaro

primero, soy preciso, no precisa. jejejeje

te aclaro. defino una variable llamada nuevobanco, que es del tipo tfbancos. es decir, es un tipo de objeto. ese objeto tfbancos, tiene la propiedad formstyle a child. luego creo un formulario de bancos, y lo asigno a la variable nuevobanco. es como si creas un tstringlist y lo asignas a una variable de ese tipo. al crearlo , llamas a su constructor por defecto create(). y ya esta. el resto de lineas son para posicionarlo en una posicion de pantalla determinada. y una vez creado, lo muestras show();

__________________
frenadol
Responder Con Cita
  #5  
Antiguo 21-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola Repelus.

quiero recomendarte en primer lugar la lectura de la guía de estilo de los foros (link en mi firma). No comprendo porque escribis todo el texto en negrita, pero para mi es igual que si escribieras todo en MAYUSCULAS, pues da la sensación que estas GRITANDO, ENOJADO o ALTERADO de alguna forma.

También el uso de palabras como AYUDAAAAAAAAA (con unos cuantos signos de admiración en el título) da una sensación de urgencia y exigencia que no es bien recibida por estos lares.

por último, lo que ocurre (el error es bien específico) es que cuando creas el formulario MDIChild no hay un MDIForm activo. Lo que debes hacer es crear el formulario MDIForm antes que cualquier MDIChild. (Windows no permite que estos sean huerfanos, pues siempre están contenidos en el espacio del padre...).

Hasta luego.

Responder Con Cita
  #6  
Antiguo 21-02-2004
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Perdona por lo de 'precisa', es que me confundió el nick.


Voy a intentarlo inmediatamente y veré que ocurre, muchas gracias por la ayuda y si funciona lo haré saber.

De todas formas sabrías explicar la causa del error que me da, porque es raro pues si cambio el formulario con que arranca la aplicacion al formulario principal, no hay ningun problema.
Responder Con Cita
  #7  
Antiguo 21-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
ya está explicado en mi post anterior... lo has visto?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 21-02-2004
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Perdón por las negritas y los signos de exclamación. Desconocía el significado de eso. Lo de la prisa si que es cierto pero no quería ofender a nadie, pido disculpas una vez más.

Pero respecto a tu explicacion te diré que el formulario mdi padre si que está creado y es el formulario del menu principal, pues tiene asignada en la propiedad FormStyle el valor fsMDIForm y por lo tanto cuando en este formulario creo el formulario hijo no entiendo el porqué del mensaje de error.

Saludos.


Cita:
Empezado por jachguate
Hola Repelus.

quiero recomendarte en primer lugar la lectura de la guía de estilo de los foros (link en mi firma). No comprendo porque escribis todo el texto en negrita, pero para mi es igual que si escribieras todo en MAYUSCULAS, pues da la sensación que estas GRITANDO, ENOJADO o ALTERADO de alguna forma.

También el uso de palabras como AYUDAAAAAAAAA (con unos cuantos signos de admiración en el título) da una sensación de urgencia y exigencia que no es bien recibida por estos lares.

por último, lo que ocurre (el error es bien específico) es que cuando creas el formulario MDIChild no hay un MDIForm activo. Lo que debes hacer es crear el formulario MDIForm antes que cualquier MDIChild. (Windows no permite que estos sean huerfanos, pues siempre están contenidos en el espacio del padre...).

Hasta luego.

Responder Con Cita
  #9  
Antiguo 21-02-2004
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Hola de nuevo,

Siento decir que la solución expuesta no me sirve y me sigue produciendo el mismo error.


Cita:
Empezado por maruenda
primero, soy preciso, no precisa. jejejeje

te aclaro. defino una variable llamada nuevobanco, que es del tipo tfbancos. es decir, es un tipo de objeto. ese objeto tfbancos, tiene la propiedad formstyle a child. luego creo un formulario de bancos, y lo asigno a la variable nuevobanco. es como si creas un tstringlist y lo asignas a una variable de ese tipo. al crearlo , llamas a su constructor por defecto create(). y ya esta. el resto de lineas son para posicionarlo en una posicion de pantalla determinada. y una vez creado, lo muestras show();

Responder Con Cita
  #10  
Antiguo 21-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Acabo de hacer una prueba, y he descubierto que Delphi se basa en el estilo del form principal para crear los formularios MDIChild. Si el form principal (Application.MainForm) no es MDIForm, no hay forma de crear MDIChild.

Código:
// de la unit Forms.pas

procedure TCustomForm.CreateWindowHandle(const Params: TCreateParams);
var
  CreateStruct: TMDICreateStruct;
begin
  if (FormStyle = fsMDIChild) and not (csDesigning in ComponentState) then
  begin
    if (Application.MainForm = nil) or
      (Application.MainForm.ClientHandle = 0) then
      raise EInvalidOperation.Create(SNoMDIForm);
       !!! no se puede crear si el MainForm no es MDIForm... 
        (solo para estos se crea un client handle)

Resulta que la propiedad MainForm es de solo lectura... por lo que tampoco es posible reasignarla en tiempo de ejecución.

De esta cuenta, que el form principal de tu aplicación debe ser la ventana MDIForm. Si queres validar el acceso al sistema, podes hacer una ventana normal, crearla y llamarla (con showModal) en el onShow del form principal (por ejemplo) y actuar dependiendo del resultado (mrOK=>el usuario es válido, otro valor, cerrar aplicación).

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #11  
Antiguo 21-02-2004
Avatar de Repelus
Repelus Repelus is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Repelus Va por buen camino
Gracias por tu ayuda amigo, lo intentaré de la otra forma, un saludo.
Responder Con Cita
  #12  
Antiguo 22-02-2004
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
Cita:
Empezado por Repelus
Saludos,
Como puedo solucionarlo???
Una posible forma es mostrando la ventana de acceso como la primera hija y que se lance despues de la madre, la solución que tengo implementada, después de pasar por lo mismo que tú, es así;
Código:
procedure TMotherF.Timer1Timer(Sender: TObject);
begin
          if MotherF.Showing then begin
                TFPswd.Create(nil).show;
                Timer1.Enabled:=false;
                end;
end;
Donde MotherF es la principal y TFPswd la de acceso, el timer está ajustado a un segundo y habilitado en diseño. Esto permite que la aplicación sea MDI desde el principio. Recuerda que el formulario de acceso no puede ser autocreado, se crea y destruye en tiempo de ejecución.
Lo que dice jachguate es así, es imposible hacer las aplicaciones MDI si la form principal no es la madre.
Espero te valga la propuesta.
Saludos
Responder Con Cita
  #13  
Antiguo 22-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por jachguate
contenidos en el espacio del padre...
Cita:
Empezado por Ruben_Cu
si la form principal no es la madre
Será padre o será madre???



__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #14  
Antiguo 22-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Debe de ser madre... los hombres no dan a luz....
__________________
:)
Responder Con Cita
  #15  
Antiguo 22-02-2004
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
Cita:
Empezado por jachguate
Será padre o será madre???
Buen rollo , en la ayuda de delphi se lee:
Cita:
In an MDI application, more than one document or child window can be opened within a single parent window.
Hay tenemos dos problemas...buscando en el diccionario de Ingles Español en ambos se establece que:
child-- Niño o niña|| Hijo o hija.

parent-- s. padre o madre || autor , causa, origen||pl. padres||a. madre, matriz, materna.

Bueno, si traducimos parent window y decimos que windows es ventana entonces sería madre, pero si le llamaramos formulario sería padre.
Igual sucedería con child. ¿Serán hijas o hijos?

Creo que habría que saber la opinión de quien las bautizo con estos nombres en ingles, para saber en que estaba pensando; si en padre, madre, hija o hijo.
Mientras que cada cual la llame como crea, lo importante es que se entienda.

Ah!!... al amigo DarkByte que averigüe como se reproduce el caballito de mar.
Saludos
Responder Con Cita
  #16  
Antiguo 22-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Cita:
Empezado por Ruben_Cu
Ah!!... al amigo DarkByte que averigüe como se reproduce el caballito de mar.
mi ejemplo era hablando de personas... no animales..., aunque se de algunos con los que podríamos dudar lo que son. Los bichos esos son bisexsuales, no??

Cita:
Empezado por Ruben_Cu
Saludos
Un saludo y un abrazo.
__________________
:)
Responder Con Cita
  #17  
Antiguo 22-02-2004
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
Cita:
Empezado por DarkByte
Los bichos esos son bisexsuales, no??
Claro que hablastes de hombre y mujer, solo que recordé la curiosa forma de reproducirse de estos animales, que no son hermafroditas (bisexual es otra cosa), copié esto de Encarta:
Cita:
...los machos se hacen cargo de los huevos. Después de una danza nupcial lenta y graciosa, la hembra introduce su puesta ya fecundada en la bolsa abdominal del macho. El macho recoge la puesta de varias hembras, hasta que llena su bolsa, cuyas paredes interiores están muy vascularizadas y envuelven a los huevos para alimentarlos con las sustancias nutritivas de su sangre
Cuando comienzan a romperse los huevos salen de la bolsa del macho una multitud de hijos, que parece que los está pariendo, aunque son oviparos.
La mayoría pasa a ser alimento de otros depredadores en la cadena alimentaria marina. Bueno, está bien ya, que esto es el club de delphi, no el Discovery Channel
Un saludo
Responder Con Cita
  #18  
Antiguo 22-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
a ver si lo van a coger como lema para la próxima campaña a favor de los derechos de las mujeres!!
__________________
:)
Responder Con Cita
  #19  
Antiguo 22-02-2004
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
Cita:
Empezado por DarkByte
a ver si lo van a coger como lema para la próxima campaña a favor de los derechos de las mujeres!!
Uff!!!... no había pensado en creo que es mejor poner candado al hilo antes que las muchachitas del club lo lean y quieran tomarlo de bandera, ¿te imaginas tú con la panza creciendote por todos los hijos que has concebido con las chicas que hayas estado en unas vacaciones de verano.?
Saludos
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


La franja horaria es GMT +2. Ahora son las 14:08:36.


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