Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear un form fsMDIForm y varios forms hijos (https://www.clubdelphi.com/foros/showthread.php?t=51115)

citlalliDgp 05-12-2007 23:09:23

Crear un form fsMDIForm y varios forms hijos
 
Hola amigos, necesito de su ayuda. Me encuentro en la situación de querer utilizar forms MDI (cosa que jamas he hecho). Tengo un form padre desde el cual necesito llamar algunos otros forms hijos, pero no se como puedo hacerlo. Por lo que he tratado, me he dado cuenta de que no vasta con invocarlos con Show o ShowModal.

Código Delphi [-]
Form3.Show();
Ni tampoco funciona con:
Código Delphi [-]
Form3.ShowModal();

Entonces la pregunta es, cómo puedo invocarlos ???.

Espero me hayan entendido, y agradezco de antemano su ayuda.:confused:

jhonny 05-12-2007 23:27:40

El Form padre debe tener la propiedad ForStyle es fsMDIForm y los hijos en fsMDIChild...

Para mostrar el formulario hijo solo basta con crearlo, asi por ejemplo:

Código Delphi [-]
FormularioHijo := TFormularioHijo.Create(Application);

Pero si en el Form padre tienes algun TPanel, ese TPanel debera estar invisible para que el hijo pueda ser mostrado.

Y listo.

citlalliDgp 05-12-2007 23:35:13

Crear un form fsMDIForm y varios forms hijos
 
Hola jhonny, de antemano, gracias por tu atención.

Ya he intentado invocar el form hijo de la forma en que me has indicado:

Código Delphi [-]
procedure TForm2.Productos1Click(Sender: TObject);
begin
Form3 := TForm3.Create(Application);
end;
end.

Pero me arroja un error que dice "Cannot create form No. MDI forms are currently active"

Cabe mencionar que en el form padre tengo un TMainMenu que es desde donde estoy tratando de invocar los forms hijos.

Podrías ayudarme ?

jhonny 05-12-2007 23:39:33

Verifica que el hijo tenga el FormStyle en fsMDIChild y que el padre sea fsMDIForm.

jhonny 05-12-2007 23:41:27

Bueno, ahora que haz colocado el error cambia la cosa un poco...

Verifica tambien que el Form "Padre" tambien sea el Form principal de tu aplicación.

citlalliDgp 05-12-2007 23:50:12

Crear un form fsMDIForm y varios forms hijos
 
Muy bien, ya he logrado lo que quería. Y eso gracias a tu ayuda.

Ahora, surgen dos dudas. Puesto en este tipo de forms MDI no puedo utilizar el ShowModal, necesito saber como puedo hacer para que mientras un form hijo este ejecutandose, el form padre quede inhabilitado.

La otra duda es, por qué no puedo cerrar los forms hijos ???;)

jhonny 06-12-2007 00:21:35

Cita:

Empezado por citlalliDgp (Mensaje 250817)
Muy bien, ya he logrado lo que quería. Y eso gracias a tu ayuda.

Ahora, surgen dos dudas. Puesto en este tipo de forms MDI no puedo utilizar el ShowModal, necesito saber como puedo hacer para que mientras un form hijo este ejecutandose, el form padre quede inhabilitado.

La otra duda es, por qué no puedo cerrar los forms hijos ???;)

Bueno, son dos preguntas y te las voy a enumerar en las dos respuestas respectivamente:

1) Si puedes usar el ShowModal, pero para eso el formulario modal tendra que tener su propiedad FormStyle como fsNormal.

2) Si no defines una acción al cerrar un MDIChild este tomara por defecto el valor caMinimize, para cambiar este valor por el que mas te conviene basta con que en el OnClose del formulario de tipo Child hagas algo como lo siguiente:

Código Delphi [-]
Action := caFree;

Los posibles valores de Action y lo que estos hacen, los encontraras en la ayuda en el topico TCustomForm.OnClose y son los siguientes...


Cita:

caNone The form is not allowed to close, so nothing happens.
caHide The form is not closed, but just hidden. Your application can still access a hidden form.
caFree The form is closed and all allocated memory for the form is freed.
caMinimize The form is minimized, rather than closed. This is the default action for MDI child forms.

citlalliDgp 06-12-2007 01:42:31

Crear un form fsMDIForm y varios forms hijos
 
Hola otra vez. Tengo otro problema. Cuando Inicio mi aplicación se abre el form padre (que es tambien el form principal) pero me aparecen todos los forms hijos abiertos a la vez, y yo no necesito que esten todos abiertos. Que puedo hacer para que los forms hijos aparezcan solo cuando yo los invoque.

Caro 06-12-2007 14:42:04

Hola citlalliDgp, debes quitar tus forms hijos del autocreate (Project->Options), asi solo los creas cuando los necesites.

Saluditos

jhonny 06-12-2007 14:45:59

Cita:

Empezado por citlalliDgp (Mensaje 250844)
Hola otra vez. Tengo otro problema. Cuando Inicio mi aplicación se abre el form padre (que es tambien el form principal) pero me aparecen todos los forms hijos abiertos a la vez, y yo no necesito que esten todos abiertos. Que puedo hacer para que los forms hijos aparezcan solo cuando yo los invoque.

Te vas a Project|Options|Forms y sacas del Auto-create forms los forms que nos haz mencionado excepto el principal, colocandolos en la sección de Available forms.

Nota: Si tienes una nueva pregunta, lo mejor es que abras un nuevo hilo con su respectivo titulo, para que las futuras personas que tengan la misma inquietud encuentren mas facil la solución :).

citlalliDgp 06-12-2007 15:11:42

Gracias por su atencion, jhonny y caro. Seguiré tu consejo jhonny pues tengo mas dudas.:)

Gabo 07-12-2007 15:13:31

Hola, quería comentarte de un artículo en la wiki que trata sobre las aplicaciones MDI. Se trata de éste:

http://wiki.clubdelphi.com/wiki/inde...MDI_CPPBuilder

En él, encontrarás todas las respuestas a las preguntas que ya has hecho y algo más.

El código está en C++Builder, pero los conceptos son los mismos y verás que las propiedades y métodos de los que ya te han hablado johnny y Caro son los mismos.

Espero que a alguien más le sea útil el artículo.


La franja horaria es GMT +2. Ahora son las 05:34:39.

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