Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con Form MDIChild (https://www.clubdelphi.com/foros/showthread.php?t=69671)

Paulao 01-09-2010 14:32:24

Problemas con Form MDIChild
 
Señores, tengo um form principal que es fsNormal y este llama un form(frmOrcamento) que es MDIForm. Este form llama otro form(frmCriaOrcamento) que es MDIChild. El problema es que quando yo llamo el Form MDIChild, el no starta, o sea, yo llamo el form, pero el no aparece en la pantalla o dentro del form MDI. El form MDI, el tieno solo un menu Ribbon de DevExpress, solo esto y nada mas. Este form Child, el viene de una herencia, pero su herencia no tiene ninguno codigo, solo un menu Ribbon y nada mas.

ecfisa 01-09-2010 16:33:44

Hola Paulao.

Delphi dispone dos interfaces para el usuario: SDI y MDI.

Esta última (Multiple Document Interface) consiste en una ventana principal (madre) que gestiona dentro de su espacio a multiples ventanas dependientes de ella (hijas). Esto es intrínseco al funcionamiento de MDI.


Por lo que, si no me equivoco, lo que queres hacer, crear una ventana principal (fsNormal) que llame a un MDIForm, no va a funcionar.

En una aplicación MDI la ventana principal siempre debe ser un MDIForm.


Saludos.:)

Caro 01-09-2010 18:22:26

Hola Paulao, en una aplicación MDI el MainForm siempre tiene que ser el MDIForm por lo que no va a funcionar de la forma que planteas, lo que se me ocurre es que tu form principal sea el MDIForm el cual lo escondes al inicio de tu aplicación (esto tendrías que hacerlo despues de crear el form principal en el DPR) y muestras el form normal (para ello la propiedad Visible del form en True).

Código Delphi [-]
 
  .............................................
  Application.CreateForm(TFormMain, FormMain);
 
  Application.ShowMainForm := False;
  Application.Run;

Saluditos

Paulao 01-09-2010 22:01:36

Creo que usteds no me entendieron. Mi Form es un MDIForm y el otro form es un MDIChild. El que pasa es que el MDIChid no start en mi MDIForm. Yo uso solo um Menu Ribbon de DevExpress.

Paulao 01-09-2010 22:16:12

Dejame explicar mejor. Mi programa tiene um Form principal, que es el inicio de todo. Este form es fsNormal, pero el no llama ninguno MDIChild. hay un boton que llama otro form llamado Orcamento(Este es fsMDIForm). Este form MDIForm, llama 3 otros forms MDIChild. Esses(MDIChild) no están aparecendo dentro del form MDIForm, o sea, no muestra nada quando clico en el boton. Esta es mi llamada para el form MDIChild:
Código Delphi [-]
procedure TfrmOrcamento.btnCriaPedClick(Sender: TObject);
begin
  inherited;
  if frmCriaOrcamento = nil then
    frmCriaOrcamento := TfrmCriaOrcamento.Create(Self);
  frmCriaOrcamento.Show;
end;
Yo jamas ha dicho que quiero llamar un Form MDIChild en un Form Normal. Mi español no es bueno, pero yo no he dicho nada. Abajo es el que he escrivido.
Cita:

Señores, tengo um form principal que es fsNormal y este llama un form(frmOrcamento) que es MDIForm. Este form llama otro form(frmCriaOrcamento) que es MDIChild

ecfisa 01-09-2010 22:50:07

Cita:

Empezado por Paulao (Mensaje 375275)
Dejame explicar mejor. Mi programa tiene um Form principal, que es el inicio de todo. Este form es fsNormal, pero el no llama ninguno MDIChild. hay un boton que llama otro form llamado Orcamento(Este es fsMDIForm). Este form MDIForm, llama 3 otros forms MDIChild. Esses(MDIChild) no están aparecendo dentro del form MDIForm, o sea, no muestra nada quando clico en el boton. Esta es mi llamada para el form MDIChild:
Código Delphi [-]
procedure TfrmOrcamento.btnCriaPedClick(Sender: TObject);
begin
  inherited;
  if frmCriaOrcamento = nil then
    frmCriaOrcamento := TfrmCriaOrcamento.Create(Self);
  frmCriaOrcamento.Show;
end;
Yo jamas ha dicho que quiero llamar un Form MDIChild en un Form Normal. Mi español no es bueno, pero yo no he dicho nada. Abajo es el que he escrivido.

Hola Paulao.

Tu español es muy bueno, (no quisieras escuchar mi portugés... :) ).

Entendí perfectamente lo que queres hacer y lo resalte en negrita (bold) en tu texto.

Lo que estás haciendo es llamar a un MDIForm desde un Normal Form.
Y te repito mi respuesta:
Cita:

En una aplicación MDI la ventana principal siempre debe ser un MDIForm.
Si querés ejecutar correctamente una aplicación MDI, no se puede llamar a un MDIForm desde un Normal Form.

Perdón, si en algún momento no me he explicado bíen.



Saludos.:)

Paulao 01-09-2010 23:05:03

Entendi. Puzo mi form principal para MDIForm. Ahora dejame explicarlo mejor. Este form principal, es en la verdad un menu con algunos botones ribbon. El llama otro form, que deberia ser otro MDIForm, y este si, deveria llamar otros 3 forms MDIChild. Esto no estas acontecendo.

Paulao 01-09-2010 23:12:56

Solo una pregunta. Es posible un Form fsMDIForm llamar otro fsMDIForm y este ultimo llamar un fsMDIChild? Es asi que estas en mi codigo, pero no estas funcionando. En realidad, yo puzo un mensaje no corecto, pues el principal estava con fsMDIform y no fsNormal, como havia dicho, pero el siempre fue fsMDIForm. Y no estas funcionando. No da ninguno error, solo el form llamador "pisca", es asi en español y despues nada acontece.

ecfisa 01-09-2010 23:27:28

Sinceramente desconozco si así se puede... nunca lo he probado Paulao.

Voy a hacer unas pruebas y buscar algo de información y te contesto sobre lo que averigué.

Saludos :)

Paulao 01-09-2010 23:40:20

Cambie mi llamada del form principal, o sea, lo pedi que llamase a un form MDIChild. Que pasa es que no llamo tambien. No se lo que hacer, pues es una cosa mui simples, llamar un Form Child y no consigo hacerlo, o sea, no estas funcionando aca comigo. Ademas de crear el form tengo que hacer algo diferente, en DPR o otra cosa? hay alguna configuracion? Uso Delphi 7, MySql y DevExpress.

Lepe 01-09-2010 23:41:49

Cita:

Empezado por Paulao (Mensaje 375289)
Solo una pregunta. Es posible un Form fsMDIForm llamar otro fsMDIForm

No. Sólo se puede usar un MDIFORM por aplicación.

Quizás puedas usar componentes de torry.net o JVCL que tenga aspecto de MDIFORM, pero internamente sea otra cosa y que sí permitan lo que quieres. No recuerdo ninguno ahora mismo.

EDIT: Puedes hacer dos ejecutables distintos y llamarlos con ShellExecute

EDIT: Revisa en la carpeta "demos" como se trabaja con "mdiapp"

ecfisa 01-09-2010 23:47:41

Paulao, hice la prueba de esta forma:

. Form1 ( fsMDIForm) llama a:
...Form2 ( fsMDIForm) llama a:
....Form3 ( fsMDIChild) y
....Form4 ( fsMDIChild)


No dá error de ningún tipo, pero como lo suponía; Form3 y Form4 se muestran dentro de Form1,
no reconocen a Form2 como Form padre.

Delphi toma al Formulario principal como MDIForm, y si bíen no protesta
por la existencia de otro, no lo considera como un MDIForm.

No pude encontrar referencia sobre dos MDIForms en una aplicación y transferirle el nodo al segundo,
quizá se pueda hacer... pero al menos yo, no sé como.


Saludos.:)

Caro 02-09-2010 00:39:54

Hola Paulao, no se puede tener dos MDIForms, revisa el ejemplo que hizo Federico en este hilo, que es parecido a lo que tu quieres.

Saluditos

Paulao 02-09-2010 15:02:21

Miras, no se que se pasa. Ya hizo de todo, pero no funciona. Este es mi form principal llamando un form fsMDIForm, pero el principal tambien es un MDIForm:
Código Delphi [-]
procedure TfrmPrincipal.btnOrcamentosClick(Sender: TObject);
begin
  frmOrcamento := TfrmOrcamento.Create(Self);
  frmOrcamento.Show;
end;
Ahora, este MDIForm llamando un MDIChild:
Código Delphi [-]
procedure TfrmOrcamento.btnCriaPedClick(Sender: TObject);
begin
  inherited;
  if frmCriaOrcamento = nil then
    frmCriaOrcamento := TfrmCriaOrcamento.Create(Self);
  frmCriaOrcamento.Show;
end;
Que pasa es que no funciona. No me lo da error, pero no funciona. Que pasa es quando yo llamo el Child, lo aparece en la pantalla es el form Principal. Y necesito que sea MDI, pues en esta pantalla el usuario ira abri varios forms hacia dentro de un mismo form, entonces deve ser un MDI y no SDI.

Paulao 02-09-2010 15:15:19

Otra cosa ahora esta acontecendo. Hizo con que el Form Principal fuera um fsNormal, pues el no me interesa que sea MDI. Este principal llama otro form que es fsMDIForm, este form se llama frmOrcamento. Este form frmOrcamento, el va a llamar otro form fsMDIChild, llamado frmCriaOrcamento. Qua pasa ahora es que al llamar este form Child viene este mensaje:
Código Delphi [-]
Project Globa.exe raised a exception class EInvalidOperation with message 'Cannot create form. No MDI forms are currently active'. Process stopped. Use step or run to continue

ecfisa 02-09-2010 20:08:46

Hola Paulao.

Creo que no tenés claro el concepto sobre como funciona una aplicación MDI e indudablemente,
no hemos podído hacernos entender con nuestas explicaciones.
Así que buscando un poco en la web encontre este ( LINK ), que lo explica con claridad.
Está en español, pero no creo que tengas dificultad de entenderlo.

Espero que te sirva.

Saludos.:)

Paulao 02-09-2010 21:58:15

Hola a todos mas una vez. Yo tengo otros proyectos aca comigo com MDI y funcionan. El que pasa que este yo puzo um Menu Ribbon de DevExpress. No se el que pasa se es o no por cueta deste menu, pero no estas a funcionar. Voy hacer un teste aqui y ver si funcioan o no mi aplicacion MDI.

Paulao 02-09-2010 22:18:49

Adjunto a este post está mis fuentes para ver que hizo praticamente todo. Para abrirlo, hay que tener instalados en su Delphi, la suite de componente Dev Express y Delphi 7. No puzo ninguno codigo como puede ver, solo componente y llamada a form y cerrar ventana.

Paulao 02-09-2010 22:20:04

Adjunte y parece que no fue. Como hago esto, adjuntar un archivo a mi post?

Paulao 02-09-2010 22:47:03

tengo un archivo .zip de 290Kb y este forum me dice que puedo subir 293Kb. Quanto me voy a adjuntar mi archivo, diz que lo excede por 190,1Kb. No entiendo mas nada. No tengo ninguno archivo adjuntado, pues hizo limpiexa en todo, o sea, excluir todo lo que tenia. Necesito subir mis fuentes para que puedan hacer una analise e ver porque mis form MDI no funcionan.


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

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi