Ir al contenido


Foto

Mostrar distintos elementos en una misma sección


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

#1 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 18 abril 2016 - 12:51

Muy buenas con todos queridos amigos, y también expresando mi más sentido pésame por lo ocurrido en el hermano país del Ecuador.

 

En lo referente a mi pregunta, si no fuera mucha molestia me pudieran ayudar, lo que sucede es que deseo crear un form el cual en la parte de arriba poner 3 botones en línea horizontal, y en la parte de abajo deseo mostrar determinados elementos según como oprima algunos de los tres botones, por ejempplo:

 

si oprimo el botón 1 me muestra tales elementos

si oprimo el botón 2 me muestra tales elementos

si oprimo el botón 3 me muestra tales elementos

 

El detalle es que no se como organizar estos elementos, si agregarlos desde la paleta y ponerlos uno encima del otro y luego ocultarlos todos, para que despues de oprimir tal botón solo se muestren los elementos deseados.

 

Gracias por su tiempo.


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 18 abril 2016 - 04:06

A ver mi estimado, ¿a qué te refieres con elementos?, cuando hablas de elemento me confundo con HTML/PHP :)
  • 0

#3 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 18 abril 2016 - 04:15

Hola amigo enecumene, por elementos me refiero a botones, memos, edit ó progressbar.


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 18 abril 2016 - 05:17

O sea, te refieres a que el botón1 te cree más abajo 10 botones ordenados, el botón2 te cree 10 edits ordenados y así sucesivamente?.
  • 0

#5 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 18 abril 2016 - 05:46

exactamente no crear, pues los elementos ya los tendría creados, es decir que de la paleta de componentes arrastraría los componentes necesarios (botones, edits, memos... etc) sino más bien como puedo hacer para que cuando oprima un botón este me muestre una parte de los  elementos y si oprimo otro botón me muestra los demás elementos, como lo muestran los programas cuando muestran sus opciones.


  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 18 abril 2016 - 06:02

mmm, a ver, te doy dos ideas porque no llego entender por completo:

1. coloca un panel para cada elemento o grupo de elemento, de acuerdo al botón simplemente oculta los demás paneles y visualliza la quieres.
2. Recorrer todos los elementos del formulario y visualizar los elementos que quieres y ocultar los demás.

En el asunto de ordenar los elementos no entiendo bien, quizás te refieres si hay muchos elementos entremezclados posicionarlos uno al lado al otro o encima automáticamente, en Delphi XE hay un panel que te hace ese trabajo automaticamente es el TFlowPanel, no sé si lazarus tendrá algo similar.

Saludos.
  • 0

#7 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 18 abril 2016 - 06:42

Muchas gracias amigo por su respuesta, su idea N° 1 es mas o menos lo que deseo hacer, pero el problema que tengo es que como son tres botones, necesitaria 3 paneles, cada panel con sus respectivos elementos, pero si agrego un panel y luego le agrego el segundo panel, este segundo panel quedaría encima del primero, en donde me sería difícil ordenar o ver bien los elementos, claro esta hablando en modo diseño.


  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 18 abril 2016 - 06:44

Los paneles en modo de diseño lo puedes poner en donde sea, sólo debes procurar posicionarlos en modo de ejecución.
  • 0

#9 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 18 abril 2016 - 06:54

Otra alternativa, que es para lo que fueron pensado, es emplear Frames.

Un Frame es como una especie de panel/form que puedes crear y poner en un form.

 

El frama actúa de plantilla. Son muy útiles cuando uno necesita crear repetidamente un grupo de componentes con algún diseño. La plantilla se diseña por única vez y uno puede crear y poner tantas veces como uno quiera. Otro aspecto positivo de los frames es que puede además contener código y te evitas tener que repetir código.

 

En tu caso puedes diseñar 3 frames, cada uno con sus respectivos controles y código. Luego cuando presiones en el botón del "menú horizontal" lo que haces es crear/mostrar el frame correspondiente en el área cliente del form. Naturalmente que previamente deberás liberar/ocultar el frame que hubiera antes.

 

Saludos,


  • 0

#10 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 18 abril 2016 - 08:07

Muchas gracias Delphius, se ve muy interesante eso de los frames, los estoy probando, mas bien una consulta me podría dar un ejemplo simple de su uso, más que todo para terminar de entender los frames, y otra pregunta, si pongo un botón dentro del frame donde manejos sus eventos al darle clic, en el frame ó en el form donde aparece el frame.


  • 0

#11 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 abril 2016 - 11:54

Hice una demo bastante básica del concepto, algo rápido. Es para que te hagas una idea. No es algo pulido ni profesional pero es una de las maneras de llegar a lo que buscas empleando Frames.

Lo adjunto acá para que lo revises.

 

Respondiendo a tu pregunta sobre donde manejas los eventos, dependerá de lo que buscas hacer. La idea del Frame es justamente que sirva de plantilla y como tal permite añadirle código. Cuando tu pones en un form, panel, o el contenedor que deseas una instancia de un frame no sólo es un efecto visual sino que el código sigue funcionando.

Es posible sobreescribir la implementación de un botón, o de cualquier otro evento, o método que tu definas si necesitas.

 

Para sobreescribir, haz la siguiente prueba:

1. Crea un frame.

2. Agrega un botón.

3. Haz doble clic en el botón para dar la implementación al OnClick.

4. Pon de código un simple ShowMessage con el texto "Hola".

5. Ve al form, y luego agrega el frame

6. Haz doble click en el botón

7. Escribe ahora un ShowMessage con el texto "Chau"

 

Prueba y dime que obtienes ;)

Prueba también anteponiendo al ShowMessage del paso 7 un Inherithed.

 

La idea de un frame es reusar los componentes, y también parte de código. Imagina que tienes que poner 10 grupos de objetos que hacen todo lo mismo. Los frames te ahorra eso. En lugar de ponerte a hacer la implementación de todos ellos, haces un frame, le das código y luego simplemente creas en el form 10 de éste.

 

Nota que para tu ejemplo no sólo son válidos los frames, puedes llegar a similares resultados con TPageControl, TTabControl y/o similares.

 

Espero que esto te sea de guia.

 

Saludos,

Archivos adjuntos


  • 1

#12 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 27 abril 2016 - 07:07

Muchas gracias amigo Delphius, disculpe por la demora en contestar, acabo de probar tu ejemplo y si funciona perfectamente, lo que ocurre es que deseo crear un programa para registrar clientes, colegas y distribuidores, para lo cual pienso colocar tres botones para los mismos, y que cada uno en un mismo form tengan sus respectivas secciones es decir cuando le de clic al botón "clientes" en el form aparezcan todos los componentes (button, listiview) de la sección clientes, y cuando le de clic al button "colegas" en el mismo form se oculte "clientes" y aparezca los componentes de "colegas", asi igual para "distribuidores".

 

He probado con frames y me parece una buena opción pero claro que pienso usarlo con distintos componentes para clientes, colegas y distribuidores.

Tambíén he visto el pagecontrol y me parece una buena opción para tener tres espacios distintos (tres pestañas), pero lo único malo es que no puedo cambiar su color de fondo, pues siempre se queda en blanco. (uso Lazarus).

Otra opción que he probado es el componente Notebook y al igual que el pagecontrol me permite tener tres o más secciones para poner mis distintos componentes usados y a la vez me permite cambiar el color de fondo, pero lo malo es que me es díficil usar este componente, más que todo al momento que deseo moverlo a otro lado en modo diseño.

 

A todo esto me gustaría que me orienten maestros, cual de ellos me sugieres usar.


  • 0

#13 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 27 abril 2016 - 07:40

Si estudias el tema del Frames, vas a aprender que una ventaja de éstos es que se pueden aprovechar un mismo frame en varios forms. De modo que por ejemplo si tu tienes que en dos forms un grupo de controles que se repiten o que tienen un uso/funcionalidad en común, el Frame es una buena propuesta para esto.

No lo he probado, pero el concepto puede ser llevado más allá, y uno puede tener frames de frames. Es decir, un frame con frames adentro.

 

¿Porqué te digo esto? Porque si tu tienes que en tu "secciones" habrá elementos en común es una buena opción que justamente a éstos lo lleves al diseño de un frame, que tu colocarás en tus "frames secciones".

 

Lo que comentas sobre el PageControl y que el fondo se te ponga en blanco tendría que verlo. Desconozco que podrá ser... habría que estudiar el caso.

El Notebook, es algo raro entenderle, es cierto. Es cuestión de ir explorando su uso hasta que le agarras la mano.

De todos modos son algunas de las anternativas que debes considerar. Y seguro que hay otras formas de llegar a resultados similares a lo que buscas, y que yo no he dado en el clavo.

Seguramente otros compañeros tienen otras propuestas.

Los frames pueden servir, como así también hay situaciones en las que no son viables y pueden ser un "matar moscas con un cañón". No te puedo decir si tu caso es del primero o del segundo. Eso lo evaluarás tu.

 

Saludos,


  • 0

#14 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 27 abril 2016 - 08:25

A mi me gustan bastante los Frames. Ojala los hubiera descubierto antes

 

Poco que agregar a lo que ya dijo Delphius. Otra ventaja que tienen es que te ayudan a simplificar tus Forms. Podes implementar parte de la logica dentro de los frames. Osea, moves codigo del Form al Frame

 

De hecho, los Frames combinan muy bien con los TPageControl: Implementas las distintas pestañas como un Frame entero, y despues los colocas en cada hoja del TPageControl


Editado por Agustin Ortu, 27 abril 2016 - 08:25 .

  • 0

#15 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 28 abril 2016 - 08:49

Amigos una consulta si uso los frames, necesariamente el tamaño del frame tiene que ser igual al tamaño de la sección del form en donde quiero incorporarlo...?

me lo pregunto por si cuando uso un frame un poco más grande que el form al momento de pasarlo no se mostraría todos los elementos dentro del frame ?


  • 0

#16 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 28 abril 2016 - 10:24

Amigos una consulta si uso los frames, necesariamente el tamaño del frame tiene que ser igual al tamaño de la sección del form en donde quiero incorporarlo...?

me lo pregunto por si cuando uso un frame un poco más grande que el form al momento de pasarlo no se mostraría todos los elementos dentro del frame ?

 

No necesariamente.

Todo dependerá de como lo hayas diseñado y en como definas las propiedades Anchors y Align. Lo habitual es hacer que el frame ocupe el área cliente del form o el contenedor en el que se lo inserta. Pero uno puede establecerle un tamaño determinado si desea.

 

Ahora si el frame se diseña más grande que el form, y no se ha configurado Align alguno, al añadir este frame se visualizará parcialmente en el form. Mostrando este último una barra de deplazamiento para tal caso.

 

Saludos,


  • 0

#17 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 28 abril 2016 - 10:34

Amigo Delphius lo de los "Anchors" una vez los probe y al parecer sirven para que tal elemento se redimensiones junto al form principal, pero que es lo que hace un "Align"  ??


  • 0

#18 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 28 abril 2016 - 11:13

Hay dos formas de no quemarse la cabeza para posicionar frames

1. Colocando el frame en tiempo de diseño, como si de un TPanel o TGroupBox se tratara. Esta opción sirve para los casos más sencillos en los que simplemente ponemos el frame en donde va, y sabemos que va a ser siempre el mismo

2. Colocar un TPanel o TGroupBox en donde estaría el frame, sería como reservar el lugar. Luego, en tiempo de ejecución se crea el frame, se pone parent al TPanel o TGroupBox y Align alClient. Esta opción es útil si por ejemplo no sabemos que frame tenemos que mostrar porque depende de algún parámetro, o el frame no se usa siempre o para que el form inicie más rápido.

Respecto de los Anchors y Align te recomiendo que leas la documentación y juegues un poco con las propiedades.

Sirven para acomodar los controles, lo interesante es que funciona de forma dinámica. Ósea, si redimensionas una ventana los controles configurados con anchors y Align se acomodan, crecen, se achican, etc
  • 0

#19 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 28 abril 2016 - 01:15

En forma resumida:

Anchors: permite establecer la posición de un componente respecto a algun(os) bordes de su padre. De este modo cuando el padre cambia de tamaño pueda reposicionarse en la nueva ubicación relativa.

Por lo general, si se desea anclar un control en base a tres bordes lo mejor es emplear align.

 

Align: Alinea el control respecto a una posición. De ser necesario, estira o contrae el control dependiendo del anclaje que se le haya indicado y la "superficie" disponible.

 

Saludos,


  • 0

#20 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 28 abril 2016 - 02:39

Amigo Delphius entonces mas o menos quiere decir que "Anchors" ancla por partes según los lados que desee y "Align" ancla el control a todos los bordes del padre.


  • 0




IP.Board spam blocked by CleanTalk.