Como faço para fazer um tchecklistbox rolando verticalmente?
-
21-09-2019 - |
Pergunta
Eu tenho um TcheckListBox em um formulário. Sua propriedade de colunas é definida como 2 e, se houver mais itens, pode caber na tela em duas colunas, coloca uma barra de rolagem horizontal na parte inferior do controle.
A coisa é que, da maneira que essa forma apresentada, seria muito mais conveniente rolar verticalmente. Mas não consigo descobrir como fazer a caixa fazer isso. Eu pensei que definir colunas para 1 deveria funcionar, mas não funcionou.
Alguém sabe como fazer um tchecklistbox rolando verticalmente em vez de horizontalmente?
Solução
Você precisa definir Columns
a 0.
Para todos os valores positivos, o VCL envia um LB_SETCOLUMNWIDTH
Mensagem para o controle da caixa de listagem nativa subjacente, com o parâmetro de largura definido na largura do cliente da caixa de listagem dividida pelo número de colunas. Os itens que não se encaixam serão iniciados uma nova coluna com a mesma largura da coluna, para que a barra de rolagem horizontal se torne visível.
Se Columns
é 0, então há uma única coluna que abrange toda a largura do cliente da caixa de listagem, e os itens que não se encaixam tornarão a barra de rolagem vertical visível e ocultará a barra de rolagem horizontal.
Editar:
Parece haver um interesse genuíno o que acontece quando um valor negativo é usado para o Columns
propriedade.
O método TCustomListBox.CreateParams()
Define o LBS_MULTICOLUMN
Lista de estilo de caixa, dependendo do Columns
propriedade sendo diferente de 0. Para valores negativos, o sinalizador de estilo é definido, mas o VCL não envia o LB_SETCOLUMNWIDTH
Mensagem, portanto o controle nativo usa a largura da coluna padrão. Isso é documentado ser:
15 vezes a largura média do caractere para a fonte usada pela caixa de listagem.
(Pesquise "o estilo lbs_multicolumn especifica" para encontrar a passagem relevante do texto.)