Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Como hacer invisible y que no ocupe lugar un componente? (https://www.clubdelphi.com/foros/showthread.php?t=81433)

Jere_84 14-11-2012 13:44:04

¿Como hacer invisible y que no ocupe lugar un componente?
 
Hola, Tengo un formulario en el que un TComboBox aparece dependiendo de lo que haya seleccionado con anterioridad el usuario, la cuestión es que cuando esta no visible queda un espacio y no me gusta mucho, quería saber si hay alguna forma de que no ocupe lugar el componente cuando no esta visible. Busque en los tutoriales pero no eh visto ningún ejemplo... sera posible? :confused:

Saludos y gracias. :)

Caro 14-11-2012 14:28:43

Hola Jere_84, solo con el componente no, lo que puedes hacer es colocar en un panel sin borde ( BevelInner->bvNone, BevelOuter->bvNone, BorderStyle->BsNone ) tus componentes que están debajo de tu combobox y mover dicho panel arriba (Visible->False) o abajo (Visible->True) para que no se vea el espacio, para esto puedes utilizar la propiedad Top de dicho panel.

Saluditos

TiammatMX 14-11-2012 14:30:45

Cita:

Empezado por Jere_84 (Mensaje 449428)
Hola, Tengo un formulario en el que un TComboBox aparece dependiendo de lo que haya seleccionado con anterioridad el usuario, la cuestión es que cuando esta no visible queda un espacio y no me gusta mucho, quería saber si hay alguna forma de que no ocupe lugar el componente cuando no esta visible. Busque en los tutoriales pero no eh visto ningún ejemplo... sera posible? :confused:

Saludos y gracias. :)

¡¡¡POR SUPUESTO QUE ES POSIBLE!!! En diseño de sistemas y programación TODO es posible, solamente que cuesta más... ;):D

A ver, te doy una idea...

Quiero suponer que tienes un TPanel o algo así, y como sabes, es un contenedor de componentes, ¿por qué no posicionas el TComboBox en el eje vertical que le corresponde, pero en un eje horizontal QUE SALGA DE LA VISTA. Así, cuando sea necesario hacerlo visible, lo posicionas en el eje horizontal y listo...

Ahora que lo más "elegante", natural y normal es tener el componente deshabilitado y visible, hasta que se cumple la condición que permite habilitar y utilizar el contenido del componente...

Neftali [Germán.Estévez] 14-11-2012 15:46:09

Cita:

Empezado por Jere_84 (Mensaje 449428)
Hola, Tengo un formulario en el que un TComboBox aparece dependiendo de lo que haya seleccionado con anterioridad el usuario, la cuestión es que cuando esta no visible queda un espacio y no me gusta mucho, quería saber si hay alguna forma de que no ocupe lugar el componente cuando no esta visible. Busque en los tutoriales pero no eh visto ningún ejemplo... sera posible? :confused:

Lo que no me queda claro es qué deseas hacer con ese espacio.
¿Quieres que otros componentes ocupen ese lugar?
¿Quieres que el formulario se haga más pequeño?
...

Dependiendo de lo que necesites la táctica es una u otra.

Casimiro Notevi 14-11-2012 16:28:32

Cita:

Empezado por Neftali (Mensaje 449439)
Dependiendo de lo que necesites la táctica es una u otra.

Eso.
.

Jere_84 14-11-2012 20:15:22

El formulario es modal y tengo un group box que contiene dos combos y debajo dos bitbtn. El combo inferior no siempre aparece, entonces queda un espacio medio grande del group box vacio cuando no esta visible hasta llegar el limite inferior del mismo y luego aparecen los botones. La idea seria que cuando no aparece el combo inferior el group box se encogiera un poco, los dos botones subieran y el formulario fuera mas pequeño, no se si este comportamiento es posible con propiedades o habría que hacer alguna maniobra por código :confused:

gracias por las respuestas.

Caro 14-11-2012 22:41:24

Cita:

Empezado por Jere_84 (Mensaje 449494)
La idea seria que cuando no aparece el combo inferior el group box se encogiera un poco, los dos botones subieran y el formulario fuera mas pequeño, no se si este comportamiento es posible con propiedades o habría que hacer alguna maniobra por código :confused:

Si, tienes que hacerlo desde codigo, puedes utilizar la propiedad Height de tu Groupbox y tu formulario para disminuir la altura (Width para el ancho), la propiedad top para subir tus botones ...............

Saluditos

nlsgarcia 14-11-2012 23:31:41

1 Archivos Adjunto(s)
Jere_84,

Cita:

Empezado por Jere_84 (Mensaje 449494)
La idea seria que cuando no aparece el combo inferior el group box se encogiera un poco, los dos botones subieran y el formulario fuera mas pequeño, no se si este comportamiento es posible con propiedades o habría que hacer alguna maniobra por código

Revisa el ejemplo anexo en el cual se redimensiona Form2 y sus controles en función de la selección de ComboBox2 de Form2 en Form1 por medio de un CheckBox.

Espero sea útil :)

Nelson.

Neftali [Germán.Estévez] 15-11-2012 10:05:52

Cita:

Empezado por Jere_84 (Mensaje 449494)
El formulario es modal y tengo un group box que contiene dos combos y debajo dos bitbtn. El combo inferior no siempre aparece, entonces queda un espacio medio grande del group box vacio cuando no esta visible hasta llegar el limite inferior del mismo y luego aparecen los botones. La idea seria que cuando no aparece el combo inferior el group box se encogiera un poco, los dos botones subieran y el formulario fuera mas pequeño, no se si este comportamiento es posible con propiedades o habría que hacer alguna maniobra por código :confused:

Es posible que si juegas con paneles en el formulario y con la propiedad Autosize del formulario, puedas conseguir que se ajuste sin ni siquiera colocar una línea de código.

roman 15-11-2012 16:23:44

Cita:

Empezado por Neftali (Mensaje 449553)
Es posible que si juegas con paneles en el formulario y con la propiedad Autosize del formulario, puedas conseguir que se ajuste sin ni siquiera colocar una línea de código.

Yo ya jugué ese juego y perdí :o :D

Es que, además del autosize, hay que mover los componentes al nuevo "top" que queda vacío. Par eso podrían ser los anchors, pero eso funciona sólo respecto del formulario, no respecto de un panel, por ejemplo.

No sé porqué, pero me parece que en Delphi XE2 hay paneles para hacer layouts más dinámicos, ¿no es así?

// Saludos

Neftali [Germán.Estévez] 15-11-2012 17:39:00

He hecho una pequeña prueba y más o menos me referíá a esto. Subo el ejemplo al FTP (Redimensionar Formulario).

En mi caso con un código como este, que básicamente oculta el panel y cambia un par de alineaciones para que se "reajuste".

Código Delphi [-]
  if CheckBox1.Checked then begin
    Panel2.Align := alTop;
  end
  else begin
    Panel2.Align := alNone;
  end;
  // Cambiar el estado
  Self.AutoSize := False;
  Self.AutoSize := True;
  // 
  Panel2.Visible := CheckBox1.Checked;

roman 15-11-2012 17:50:30

¡Ah! Ya veo como le haces. Oye, pero ni siquiera necesitas ese código ¿no? Es decir, tu ejemplo me funciona si sólo pongo Panel2.Align en alTop y Self.AutoSize en true en diseño.

// Sludos

Neftali [Germán.Estévez] 15-11-2012 18:13:58

Es posible, es posible.
Lo he generado rápido probando las propiedades, pero afinando un poco más es posible que como comentas se pueda "ahorrar" alguna línea más.

En este caso quería que al volver a pulsar el check, el formulario "volviera" otra vez a como estaba. Si es algo que sólo se desea hacer en el Show (hacerlo más pequeño) y no va a cambiar mientra ese form está visible, sobrarán lineas seguro.

roman 15-11-2012 18:24:13

Cita:

Empezado por Neftali (Mensaje 449618)
Es posible, es posible.
Lo he generado rápido probando las propiedades, pero afinando un poco más es posible que como comentas se pueda "ahorrar" alguna línea más.

En este caso quería que al volver a pulsar el check, el formulario "volviera" otra vez a como estaba. Si es algo que sólo se desea hacer en el Show (hacerlo más pequeño) y no va a cambiar mientra ese form está visible, sobrarán lineas seguro.

Pues con tu ejemplo, si le quitas el código y pones las propiedades indicadas, hace eso, aparece y desaparece y el form se acorta y se alarga.

// Saludos

Neftali [Germán.Estévez] 15-11-2012 18:44:16

Correcto.
Pues entonces queda claro que se puede hacer. Si es que Delphi es mucho delphi... ;-)


La franja horaria es GMT +2. Ahora son las 01:27:26.

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