Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Forms dentro de otro (https://www.clubdelphi.com/foros/showthread.php?t=94521)

mRoman 17-03-2020 19:52:52

Forms dentro de otro
 
Hola buenos dias

Estoy trabajando con: Delphi 6, Win10 y Firebird 2.0

Estoy tratando de hacer algo con los forms. Tengo una aplicación con formulario principal MDI (Menu Principal) y los demas son Child. Pero estoy tratando de programar que dentro un form -es aqui donde deseo me asesoren si se puede o no hacerlo- se vean otros forms...

1.- En primera, se puede hacer esto con los MDI/Child??

Tengo un formulario (fsNormal, no sé si deba ponerlo en fsChild o dejarlo asi) con 2 Panels, uno de ellos tiene 3 botones, y en el otro panel deseo q se vean los datos de los otros formularios, dependiendo del botón que se presione.

Como puedo hacer esto?, usando los MDI/Child.

Saludos a todos y Muchas Gracias por su tiempo!
(cuidense del CoronaVirus)

mRoman 17-03-2020 20:42:18

Bueno....ya investigué y no se puede...pero existe otra opción PageControl, este resuelve el problema. Ocultando de principio los TabSheet e irlos mostrando según el boton presionado....esteticamente se ve bien y resuelve...espero que me funcione ya con datos DataSet

ecfisa 17-03-2020 20:47:20

Hola.

Se pueden visualizar otros formularios dentro de formularios MDIChild, ej.:


El código de ejemplo que visualiza los dos formularios normales dentro del MDIChild es:
Código Delphi [-]
procedure TMDIChild.Button1Click(Sender: TObject);
begin
  // Un form
  Form3 := TForm3.Create(Self);
  Form3.Show;
  Form3.Parent := Self;
  Form3.Align  := alTop;
  Form3.Width  := MDIChild.Width;
  Form3.Height := MDIChild.Height div 2;
  // Otro form
  Form4 := TForm4.Create(Self);
  Form4.Show;
  Form4.Parent := Self;
  Form4.Align := alTop;
  Form4.Width := MDIChild.Width;
  Form4.Height := MDIChild.Height div 2;
end;
Pero no sé si es todo lo que deseas hacer...

Saludos :)

ecfisa 17-03-2020 20:49:42

Hola de nuevo.

Ahora que veo tu segundo mensaje entiendo lo que buscas hacer, y sí el TPageControl es el control indicado para eso.

Saludos :)

mRoman 19-03-2020 03:24:22

Cita:

Empezado por ecfisa (Mensaje 536306)
Hola de nuevo.

Ahora que veo tu segundo mensaje entiendo lo que buscas hacer, y sí el TPageControl es el control indicado para eso.

Saludos :)

Si gracias ecfisa....las 2 opciones son viables, pero decante por el PageControl....y por ahi le di, ya tengo la pantalla hecha.!!!

Gracias de todas maneras por tu aportación y tu tiempo!.

Saludos.

mRoman 24-03-2020 05:35:03

Cita:

Empezado por ecfisa (Mensaje 536305)
Hola.

Se pueden visualizar otros formularios dentro de formularios MDIChild, ej.:


El código de ejemplo que visualiza los dos formularios normales dentro del MDIChild es:
Código Delphi [-]
procedure TMDIChild.Button1Click(Sender: TObject);
begin
  // Un form
  Form3 := TForm3.Create(Self);
  Form3.Show;
  Form3.Parent := Self;
  Form3.Align  := alTop;
  Form3.Width  := MDIChild.Width;
  Form3.Height := MDIChild.Height div 2;
  // Otro form
  Form4 := TForm4.Create(Self);
  Form4.Show;
  Form4.Parent := Self;
  Form4.Align := alTop;
  Form4.Width := MDIChild.Width;
  Form4.Height := MDIChild.Height div 2;
end;
Pero no sé si es todo lo que deseas hacer...

Saludos :)

Hola que tal ECFISA.

Estoy explorando el código q me pasaste. Fijate q me gustaría aplicar algo con esto. Te explico o les explico -mejor dicho- la idea q traigo.

En un formulario MDChild tengo 4 botones (Inventario, Entradas, Salidas, Transferencias) estos botones son SpeedButtons, me gustaría hacer el efecto que hice con el pagecontrol. Dando click sobre alguno de estos botones muestro la pestaña en cuestión, pero ahora quiero saber como se puede hacer los mismo con tu código.

Sé que debo tener 4 formularios (fsNormal) para mostrarlos dentro del MDIChild. Hice una prueba con un formulario y lo asocie a un SpeedButton y como dije, funcionó.

Pero ahora como le hago para cerrarlo al momento de dar click sobre otro de los botones?.

La idea que traigo es facilitarle al usuario que en una sola pantalla pueda hacer los movimientos de almacén, consultar inventario, realizar entradas, salidas y transferencias a almacén.

Se como puedo resolverlo, haciendo por cada concepto un formulario y mandarlos llamar desde el menú principal, pero es algo tipico que me gustaria cambiarlo como lo comento.

Recapitulando, por ahora solo tengo el problema de como cierro el formulario TRASFERENCIAS (por ejemplo) para abrir el de ENTRADAS o algun otro según de click el usuario sobre algunos de los otros botones antes mencionados.

Espero haberme explicado.

Saludos y gracias a todos por su tiempo.

mRoman 24-03-2020 06:46:30

Ya supe como cerrarlo...sencillo.

Ahora a los formularios (fsNormal) que viualizo dentro del formulario MDIChild, tienen un comportamiento raro cuando les agrego a panels, no se ajustan al total de la pantalla del MDIChild, ambos formularios tiene el Align:=alClient, y también por código se lo especifico nuevamente...:

Código Delphi [-]
    if frmEntradas.Visible then
         frmEntradas.Close;
    frmTransferencias := TfrmTransferencias.Create(Self);
    frmTransferencias.Show;
    frmTransferencias.Parent := Self;
    frmTransferencias.Align  := alClient;
    frmTransferencias.Width  := frmMovtosAlmacen.Width;
    frmTransferencias.Height := frmMovtosAlmacen.Height div 2;

pero no se alienan o se ajusta al formulario MDIChild, si no hasta que redimensiono (manualmente con el mouse) en tiempo de ejecución el formulario MDIChild. También especifique en los formularios fsNormal en su propiedad "WindowsState" a "wsMaximized" y pues tampoco tiene efecto, sigue igual, sin cambios.

Espero me puedan ayudar. Gracias nuevamente por su tiempo.

SALUDOS !!

ecfisa 24-03-2020 12:25:29

Hola.

Seguramente por que te he entendido mál, intenté reproducir la situación que mencionas pero no lo logro, el formulario fsNormal siempre se ajusta al cliente del fsMDIChild:

Lo único que veo extraño en tu código es que dos líneas quedan invalidadas por el valor que recibió la propiedad Align:
Código Delphi [-]
  frmTransferencias.Align  := alClient;           // <- 
  // -> estas dos:
  frmTransferencias.Width  := frmMovtosAlmacen.Width;
  frmTransferencias.Height := frmMovtosAlmacen.Height div 2;
Aunque no explica el comportamiento que comentas...

Saludos :)

mRoman 24-03-2020 17:55:44

Cita:

Empezado por ecfisa (Mensaje 536422)
Hola.

Seguramente por que te he entendido mál, intenté reproducir la situación que mencionas pero no lo logro, el formulario fsNormal siempre se ajusta al cliente del fsMDIChild:

Lo único que veo extraño en tu código es que dos líneas quedan invalidadas por el valor que recibió la propiedad Align:
Código Delphi [-]
  frmTransferencias.Align  := alClient;           // <- 
  // -> estas dos:
  frmTransferencias.Width  := frmMovtosAlmacen.Width;
  frmTransferencias.Height := frmMovtosAlmacen.Height div 2;
Aunque no explica el comportamiento que comentas...

Saludos :)

Que tal.

Gracias por contestar.

Al formulario fsNormal, agregale una panel....y ejecuta tu aplicación. No sé si tenga algo que ver, pero veo q manejas una versión delphi mayor a la q yo uso q es Delphi6, siento q no, pero podrá ser la causa?.

Con respecto al Align, los quitaré de mi código. Hice una prueba con mis formularios fsNormal, si ningun PANEL....Y SÍ SE AJUSTA AUTOMATICAMENTE!!!...esto me hace pensar que los paneles influyen en ese comportamiento que te comento.

Saludos y gracias por tu tiempo. Seguiré buscando.

ecfisa 24-03-2020 19:10:12

Hola.
Con el panel sigue alineando:

Tal vez sea la versión... lamento no tener Delphi 6 para probar.

Saludos :)

mRoman 24-03-2020 19:18:23

Cita:

Empezado por ecfisa (Mensaje 536436)
Hola.
Con el panel sigue alineando:

Tal vez sea la versión... lamento no tener Delphi 6 para probar.

Saludos :)

Gracias.

Fijate q los paneles los tengo alineados a TOP o BOTTOM, bueno tengo 3 paneles 1 a TOP el 2 al CLIENT y el 3 a BOTTON...intentalo asi...a ver q efecto te da?

Gracias.

ecfisa 24-03-2020 19:42:04

Hola.

Sigue alineando:


Saludos :)

mRoman 24-03-2020 19:56:10

Cita:

Empezado por ecfisa (Mensaje 536441)
Hola.

Sigue alineando:


Saludos :)

Pues entonces es mi versión de Delphi.....que lástima, me había gustado esta forma para mostrar las pantallas al usuario...ni modo, tendré que mostrarlas por separado y no en un mismo formulario o bien seguir viendo el comportamiento con PageControl, ya habia empezado ahi, pero quize explorar esta opción...ya que con el PageControl me estaba liando mas...con los datos, abrir, cerrar...en fin.

En fin...te agradezco enormemente tu apoyo y tu tiempo.

Saludos !!!

mRoman 24-03-2020 20:54:09

1 Archivos Adjunto(s)
Cita:

Empezado por ecfisa (Mensaje 536441)
Hola.

Sigue alineando:


Saludos :)


Fijate, así me muestra la pantalla.

mRoman 25-03-2020 02:44:54

Cita:

Empezado por mRoman (Mensaje 536445)
Fijate, así me muestra la pantalla.

Bueno el problema, se resolvió con esto:
Código Delphi [-]
    frmMovtosAlmacen.Height:=449;
    frmMovtosAlmacen.Height:=450;

Código del procedimiento:
Código Delphi [-]
procedure TfrmMovtosAlmacen.sBtnTransfClick(Sender: TObject);
begin
    if frmEntradas.Visible then
         frmEntradas.Close;
    frmTransferencias := TfrmTransferencias.Create(Self);
    frmTransferencias.Show;
    frmTransferencias.Parent := ScrollBox1;
    frmTransferencias.Align  := alClient;
    frmTransferencias.Width  := frmMovtosAlmacen.Width;
    frmTransferencias.Height := frmMovtosAlmacen.Height;
    frmTransferencias.WindowState:=wsMaximized;
    frmMovtosAlmacen.Height:=449;
    frmMovtosAlmacen.Height:=450;
end;

Tuve que re dimensionar por código el formulario MDChild para que el formulario fsNormal, mostrara sin problemas los paneles....


La franja horaria es GMT +2. Ahora son las 04:32:02.

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