Pregunta

Tengo un TCheckListBox en un formulario. Columnas su propiedad se establece en 2, y si hay más elementos de los que caben en la pantalla en dos columnas, se pone una barra de desplazamiento horizontal en la parte inferior del control.

La cosa es que la forma en que esta forma distribuida, sería mucho más conveniente para desplazarse verticalmente. Pero me parece que no puede encontrar la manera de hacer que el cuadro de hacer eso. Pensé establecer columnas a 1 debería funcionar, pero no es así.

Alguien sabe cómo hacer un desplazamiento TCheckListBox verticalmente en lugar de horizontalmente?

¿Fue útil?

Solución

Es necesario establecer Columns a 0.

Para todos los valores positivos de la VCL envía un mensaje LB_SETCOLUMNWIDTH al control cuadro de lista nativa subyacente, con el parámetro de ancho establecido al ancho cliente cuadro de lista dividida por el número de columnas. Los productos que no se ajustan comenzarán una nueva columna con el mismo ancho de la columna, por lo que la barra de desplazamiento horizontal se hace visible.

Si Columns es 0, entonces existe una única columna que se extiende por todo el ancho del cliente del cuadro de lista, y los elementos que no encajan hará que la barra de desplazamiento vertical visible, y ocultar la barra de desplazamiento horizontal.

Editar

Parece que hay un verdadero interés lo que sucede cuando se usa un valor negativo para la propiedad Columns.

El método TCustomListBox.CreateParams() define el estilo de cuadro de lista LBS_MULTICOLUMN dependiendo de la propiedad Columns ser diferente de 0. Para valores negativos se establece el indicador estilo, pero la VCL no envía el mensaje LB_SETCOLUMNWIDTH, por lo que el control nativo utiliza la columna por defecto anchura. Es documentado a ser:

  

15 veces el ancho de carácter promedio de la fuente utilizada por el cuadro de lista.

(Búsqueda de "El estilo LBS_MULTICOLUMN especifica" para encontrar el pasaje pertinente del texto.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top