Как сделать вертикальную прокрутку TCheckListBox?
У меня есть TCheckListBox на форме. Его свойство "Столбцы" имеет значение 2, и если в двух столбцах больше элементов, которые могут уместиться на экране, он размещает горизонтальную полосу прокрутки в нижней части элемента управления.
Дело в том, что, как эта форма выложена, было бы гораздо удобнее прокручивать вертикально. Но я не могу понять, как заставить коробку делать это. Я думал, что установка Columns в 1 должна работать, но это не так.
Кто-нибудь знает, как сделать прокрутку TCheckListBox вертикально, а не горизонтально?
1 ответ
Вам нужно установить Columns
до 0.
Для всех положительных значений VCL отправляет LB_SETCOLUMNWIDTH
сообщение для основного элемента управления собственного списка, с параметром width, равным ширине клиента списка, деленной на количество столбцов. Элементы, которые не помещаются, начнут новый столбец с той же шириной столбца, поэтому горизонтальная полоса прокрутки станет видимой.
Если Columns
Если 0, то есть один столбец, который охватывает всю ширину списка клиента, а элементы, которые не помещаются, сделают вертикальную полосу прокрутки видимой и скроют горизонтальную полосу прокрутки.
Редактировать:
Кажется, есть реальный интерес, что происходит, когда отрицательное значение используется для Columns
имущество.
Метод TCustomListBox.CreateParams()
устанавливает LBS_MULTICOLUMN
стиль списка в зависимости от Columns
свойство, отличное от 0. Для отрицательных значений установлен флаг стиля, но VCL не отправляет LB_SETCOLUMNWIDTH
сообщение, поэтому собственный элемент управления использует ширину столбца по умолчанию. Документально подтверждено:
15-кратная средняя ширина символа для шрифта, используемого списком.
(Найдите "Стиль LBS_MULTICOLUMN указывает", чтобы найти соответствующий фрагмент текста.)