Ir al contenido



Foto

Como acoplar forms en el formulario principal?


  • Por favor identifícate para responder
19 respuestas en este tema

#1 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 24 abril 2015 - 03:15

Como se puede hacer con un solo form principal  acoplar más formularios dentro del mismo. Es decir como acoplarlo entre los botones superiores (Toolbar) y la barra de estado (statusbar) sin visualizar el boton maximizar, minimizar o cerrar la ventana formando parte  como si fuera una sola, permitiendo tambien pulsar las opciones del form principal. Con Tpanels?

 

El ejemplo más claro es la ventana que sale al pulsar el icono MI PC.

 

Un saludo


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 24 abril 2015 - 05:14

Colocas un panel con la propiedad align en alClient y al llamar al form colocas este codigo:


delphi
  1. Form2 := TForm2.create(self);
  2. Form2.parent := Panel1;
  3. Form2.show;

Saludos.
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.269 mensajes
  • LocationArgentina

Escrito 24 abril 2015 - 06:34

Lo que buscas hacer se conoce como aplicación MDI. Esto se puede hacer en Delphi, pero no hay hasta el momento (y puede que en nunca se lleve a cabo) el equivalente en Lazarus.

Por empezar hace tiempo que se trata de dejar esta forma de hacer aplicaciones. En segundo lugar es difícil que Lazarus de soporte a esto debido que es una característica propia de Windows y en Lazarus prima la multiplataforma.

 

Se puede simular como la propuesta de enecumene, que es crear los forms dinámicamente y establecerles el parent en un panel. Otra forma parecida consiste en emplear Frames. Los frames son parecidos a los form, pero lo que los hace especial es que sirven de plantilla.

De este modo uno puede definir un frame y crear, colocar y distribuirlos dentro de un form tantos como quiera (y si, también los puede eliminar/ocultar si se desean). Lo fantástico es que cuando uno diseña el frame, el código asociado a éste se "hereda" para todas las instancias que se creen de él. Puedes incluso heredar un frame y tener plantilla de plantillas. Y si haces un cambio, ya sea visual o en código del frame padre, cualquier frame hijo que herede de él hereda los cambios.

 

Saludos,


  • 0

#4 tmsanchez

tmsanchez

    Advanced Member

  • Miembros
  • PipPipPip
  • 85 mensajes

Escrito 24 abril 2015 - 09:35

En learndelphi.tv hay dos ejemplos relacionados con lo que comentas:

 

http://www.learndelp...ormDocking.html

 

http://www.learndelp...rmDocking2.html

 

Saludos


  • 0

#5 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 25 abril 2015 - 02:10

Gracias compañeros, voy a probar con vuestras aportaciones y ayuda. Algo de esto busque por otros sitios, pero no conseguí concretarlo. A ver si con estos puedo hacerlo. Si no perdonadme si vuelvo a solicitar vuestra ayuda. Lo que dice Dephius sobre crear Frames,eso como se sería con la componente Frame que tra el Visualizador de Objetos, a ver si veo un ejemplo de este forma, por si acaso no funciona el codigo que me comenta enecumene por estar en Lazarus.

 

Cada vez veo más impedimentos con Lazarus con respecto a delphi, aunque a nivel de codigo sean casi identicos, parece como que no se pudieran hacer aplicaciones profesionales como lo haría delphi.

 

Un saludo.


  • 0

#6 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 25 abril 2015 - 09:59

Bueno parece ser que funciona, le puesto la opcion borderStyle=none y ahora sí parece que forma parte el form2 del form principal. Ahora se puede insertar en este form2 cualquier componente para como un outlookbar etc... gracias enecumene por el código.

 

Delphius aun así no me quedo por aprender lo que me indicas con el tema de los FRAMES... me podrías dar algun ejemplo o indicarme a nivel básico como hacerlo. Estoy muy motivado por aprender cosas nuevas. es mejor los frames que panel para esto?

 

tmsanchez da dos videos interesantes que he visto pero me cuesta seguirlos, insistiré en verlos varios veces más a ver si capto todo el contenido.

 

Gracias chicos como siempre.


  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.269 mensajes
  • LocationArgentina

Escrito 25 abril 2015 - 10:26

Dooper,  Lazarus no tiene que envidiarle a Delphi... bueno quizá si su velocidad de compilación. Pero se puede hacer muchas cosas con ambos, incluso me animo a decir que con Lazarus hay cosas que no se pueden hacer con Delphi. Por ejemplo: desarrollar para Linux, algo que se viene insistiendo a Embarcadero desde hace varios años.

Claro que no son lo mismos, pero bien que comparten muchísimas cosas. Si hasta se han desarrollado kernel (Toro Kernel) y videos juegos (en PascalGameDevelopment puedes encontrar referencias).

 

Básicamente para crear un frame se deben seguir los siguientes pasos:

1. File -> New -> Frame

2. Se lo diseña con los componentes y el código necesario

3. Una vez diseñado, lo insertamos en el form/panel o el contenedor que queremos: Nos ubicamos en la paleta de componentes Standard y pulsamos en TFrame (Forms), que está casi al final de la lista

4. Nos aparece un cuadro de diálogo para seleccionar la unidad correspondiente al Frame. La seleccionamos y damos en Aceptar.

5. Aparece el Frame insertado. Lo podemos mover y ubicar en una posición específica

 

Eso es lo básico. Puedes crearlo y ubicarlo en tiempo de ejecución si deseas. Se hace igual como si fuera un form, que al momento de crearlo se le asigna un Owner y/o Parent.

Aquí tienes algo de material.

 

Saludos,


  • 0

#8 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 25 abril 2015 - 10:59

Ok Delphius por tu aporte, voy a ver que consigo aprender de esto. Si me atasco cuanto tanto con tu ayuda como la de compañeros de siempre...Que me aconsejas mejor para esto de MDI con frames o con panels como así lo he probado?

 

Aparte de esto, cierto es lo que dices con respecto a Lazarus, pero al ser un lenguaje "nuevo" está quizás más verde que Delphi, según he leido y rebuscado por sitios, en cuanto a cantidad de componentes, etc...quizás esté equivocado por ser nuevo en esto, pero buscando y rebuscando casi todo está para Delphi (librerias, OCX, codigo reutilizable etc...)

 

Como curiosidad yo pensaba que MDI era por ser ventanas multiples y SDI ventana únicia o siempre y lo que yo buscaba era SDI, pero estaba en el error, ya se que MDI es unificar todas la ventanas en un form como si fuera parte del mismo, vamos lo que yo pretendía con la pregunta.

 

Un saludo


  • 0

#9 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 25 abril 2015 - 11:35

Ok Delphius por tu aporte, voy a ver que consigo aprender de esto. Si me atasco cuanto tanto con tu ayuda como la de compañeros de siempre...Que me aconsejas mejor para esto de MDI con frames o con panels como así lo he probado?

 

Aparte de esto, cierto es lo que dices con respecto a Lazarus, pero al ser un lenguaje "nuevo" está quizás más verde que Delphi, según he leido y rebuscado por sitios, en cuanto a cantidad de componentes, etc...quizás esté equivocado por ser nuevo en esto, pero buscando y rebuscando casi todo está para Delphi (librerias, OCX, codigo reutilizable etc...)

 

Como curiosidad yo pensaba que MDI era por ser ventanas multiples y SDI ventana únicia o siempre y lo que yo buscaba era SDI, pero estaba en el error, ya se que MDI es unificar todas la ventanas en un form como si fuera parte del mismo, vamos lo que yo pretendía con la pregunta.

 

Un saludo

 

Aunque la pregunta va para el maestro Delphius, voy a expresar mi opinión. Si bien los Frames son muy prácticos y flexibles para cubrir muchas necesidades, en tu caso puntual no son los más aconsejables, dado que comprados con los TFrom, los Frames carecen de varios eventos (por Ejemplo: OnCreate, OnClose por citar solo dos) que en los TForm facilitan y agilizan su implementación, que lógicamente también  se puede lograr con los Frames pero con más trabajo y más código.

 

La opción de usar un TPanel como padre de los Forms es una buena alternativa, aunque para que la aplicación sea más profesional hay que mirar cuestiones como la ventana activa, la minimización y restauración de los forms, ect, aspectos que podrían ser solventados dado que para Lazarus existe  un componente más elaborado  de nombre  MultiDoc que simula la implementación MDI: http://wiki.lazarus....al.org/MultiDoc

 

Un saludo.


  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.269 mensajes
  • LocationArgentina

Escrito 25 abril 2015 - 11:53

Aunque la pregunta va para el maestro Delphius, voy a expresar mi opinión. Si bien los Frames son muy prácticos y flexibles para cubrir muchas necesidades, en tu caso puntual no son los más aconsejables, dado que comprados con los TFrom, los Frames carecen de varios eventos (por Ejemplo: OnCreate, OnClose por citar solo dos) que en los TForm facilitan y agilizan su implementación, que lógicamente también  se puede lograr con los Frames pero con más trabajo y más código.

 

La opción de usar un TPanel como padre de los Forms es una buena alternativa, aunque para que la aplicación sea más profesional hay que mirar cuestiones como la ventana activa, la minimización y restauración de los forms, ect, aspectos que podrían ser solventados dado que para Lazarus existe  un componente más elaborado  de nombre  MultiDoc que simula la implementación MDI: http://wiki.lazarus....al.org/MultiDoc

 

Un saludo.

 

No digo que los frames sean la mejor opción. Sólo comento que son otra alternativa más que se puede barajar.

Es cierto que no poseen los eventos que dices, pero tampoco es tan engorroso simularlo.

 

Desconocía ese componente, parece interesante.

 

Saludos,


  • 0

#11 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 25 abril 2015 - 12:05

No digo que los frames sean la mejor opción. Sólo comento que son otra alternativa más que se puede barajar.

Es cierto que no poseen los eventos que dices, pero tampoco es tan engorroso simularlo.

 

Concuerdo completamente contigo mi estimado  Delphius, los frames son una muy buena alternativa, solo que cuando no se van a usar como simples contenedores de otros componentes y haya que cargarles cosillas al constructor y al destructor, pues tendrán algún trabajo adicional, que con mis años quiero evitar a toda costa. :cheesy:  :cheesy:

 

 

Desconocía ese componente, parece interesante.

 

La verdad tiene buena pinta, habrá que sacar un tiempo para probarlo.

 

Saludos.


  • 0

#12 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.269 mensajes
  • LocationArgentina

Escrito 25 abril 2015 - 12:16

Concuerdo completamente contigo mi estimado  Delphius, los frames son una muy buena alternativa, solo que cuando no se van a usar como simples contenedores de otros componentes y haya que cargarles cosillas al constructor y al destructor, pues tendrán algún trabajo adicional, que con mis años quiero evitar a toda costa. :cheesy:  :cheesy:

 

 

La verdad tiene buena pinta, habrá que sacar un tiempo para probarlo.

 

Saludos.

 

Por supuesto. Todo tiene sus pros y contras.

A mi parecer, si hay un componente al que no se le da mucha importancia y anda descuidado y ni de lan bola, es justamente el TFrame. Pobrecito, no me lo usan mucho.

 

Hay cosas que faltan pulir seguro. El tema de la herencia visual (ya sean forms o frames) es uno de esos. Se que se puede hacer pero es algo engorroso, aunque no lo he probado hacer. Y a esas instrucciones como que hace falta explicarlas mejor. En eso si le doy muchos puntos a favor a Delphi. En una característica que bien empleada es poderosa.

 

Saludos,


  • 0

#13 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 25 abril 2015 - 12:41

Me fascina vuestras controversias y conocimientos. Sinceramente me da envida sana no poder seguiros muchos en vuestras ideas y conocimientos porque pierdo el hilo por falta de estos, pero tomo nota y es "literal" lo que digo sinceramente. Quizás algun día pueda ayudar en este foro como

así están haciendo conmigo, pero esto no creo que sea pronto.

 

Voy a tomar nota de este que comenta Wilson de componente "MultiDoc",

He visto lo que comentas Delphius de como crear Frames en tu link, pero claro casi todo "a chino".

 

Voy a ir marcando pautas a ver tanto una (Frames) como la otra que da Wilson (MultiDoc)  pero me llevará tiempo entenderlas con mis breves conocimientos en la materia.

 

A ver que puedo sacar de ellas,

 

Y como siempre y no me canso Gracias!

 

Un saludo


  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.012 mensajes
  • LocationMéxico

Escrito 25 abril 2015 - 09:13

Por supuesto. Todo tiene sus pros y contras.

A mi parecer, si hay un componente al que no se le da mucha importancia y anda descuidado y ni de lan bola, es justamente el TFrame. Pobrecito, no me lo usan mucho.

 

Hay cosas que faltan pulir seguro. El tema de la herencia visual (ya sean forms o frames) es uno de esos. Se que se puede hacer pero es algo engorroso, aunque no lo he probado hacer. Y a esas instrucciones como que hace falta explicarlas mejor. En eso si le doy muchos puntos a favor a Delphi. En una característica que bien empleada es poderosa.

 

Saludos,

 

 

El Yo TFrame lo uso frecuentemente para estandarizar las pantallas de mis aplicaciones y para agilizar de cierta forma la creación de la Interfaz de Usuario.

 

Va un  (b) por el TFrame  (h)

 

Saludos 


  • 1

#15 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 26 abril 2015 - 05:51

Donde puedo conseguir algun ejemplo básico de TFrame para este tema del MDI. Quisiera verlo claro con un breve ejemplo como me ha sucedido con el Tpanel. De Igual modo con el MultiDoc a ser posible.

 

Un saludo


  • 0

#16 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 26 abril 2015 - 07:38

El Yo TFrame lo uso frecuentemente para estandarizar las pantallas de mis aplicaciones y para agilizar de cierta forma la creación de la Interfaz de Usuario.

 

Va un  (b) por el TFrame  (h)

 

Saludos 

 

Yo también los uso y mucho, son muy flexibles y en mi concepto ayudan a hacer las aplicaciones más ligeras, ágiles y fáciles de mantener, por ejemplo en un form con un PageControl con muchas Pages cargadas con muchos controles y procesos, es más cómodo diseñar un TFrame por cada Page con su propios controles y código que sobrecargar el form con  los controles y códigos de todas las Pages, incluso si las condiciones se dan se pueden cargar y descargar dinámicamente en función de la Page que las llame, esto ahorra muchos recursos.

 

Son geniales también como plantillas contenedoras de controles y código, fáciles de rehusar y modificar en sus descendientes.

 

Para el caso que nos ocupa con el amigo Dooper, los Frames son una muy buena opción, solo que para una implementación aceptable requiere un poco más de trabajo que si lo hace con Forms.

 

Un cordial saludo.


  • 0

#17 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 26 abril 2015 - 12:56

Yo también los uso y mucho, son muy flexibles y en mi concepto ayudan a hacer las aplicaciones más ligeras, ágiles y fáciles de mantener, por ejemplo en un form con un PageControl con muchas Pages cargadas con muchos controles y procesos, es más cómodo diseñar un TFrame por cada Page con su propios controles y código que sobrecargar el form con  los controles y códigos de todas las Pages, incluso si las condiciones se dan se pueden cargar y descargar dinámicamente en función de la Page que las llame, esto ahorra muchos recursos.

 

Son geniales también como plantillas contenedoras de controles y código, fáciles de rehusar y modificar en sus descendientes.

 

Para el caso que nos ocupa con el amigo Dooper, los Frames son una muy buena opción, solo que para una implementación aceptable requiere un poco más de trabajo que si lo hace con Forms.

 

Un cordial saludo.

 

Algun aporte o ejemplo implementado básico que podais dar para entender esto de los Tframe. Se agradecería por parte de un novato, ir adquiriendo destreza con estos temas.

 

Un saludo


  • 0

#18 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 27 abril 2015 - 06:46

Ya Voy entiendo eso de los TFrames, pero si alguien tiene algun pequeño ejemplo de prueba, lo agradezco para salir de cualquier duda.

 

Un saludo


  • 0

#19 Kenddy Reinardo Bello

Kenddy Reinardo Bello

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 13 abril 2019 - 01:11

Buenas, en mi caso no soy un esperto en programación dicho sea de paso estoy aprendiendo, sin embargo mirando el tema logre 

acoplar un form dentro de otro de esta manera espero que ayude

 

procedure TFrmPrincipal.MenuItem9Click(Sender: TObject);
begin
    FrmClientes:=TFrmClientes.Create(Self);
    FrmClientes.Parent:=Panel1;
    FrmClientes.Show;

 end;        


  • 1

#20 Kenddy Reinardo Bello

Kenddy Reinardo Bello

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 13 abril 2019 - 01:15

y agregando a ello esto lo he creado en Lazarus sobre todo el Formulario principal en FormStyle lo puse fsStayOnTop


  • 1