Как мне изменить размер дорожки прокрутки на панели прокрутки
-
05-07-2019 - |
Вопрос
Если вы откроете Блокнот, добавите десять строк и измените размер редактора так, чтобы отображалось только девять, дорожка большого пальца (перетаскиваемый блок на полосе прокрутки) займет почти всю длину вертикальной полосы прокрутки.Если вы добавите пару тысяч строк, высота дорожки для большого пальца составит всего несколько пикселей.
Я бы хотел продублировать это поведение в потомке TCustomControl, где я реализовал горизонтальную полосу прокрутки.Поэтому я добавил WS_HSCROLL в свой стиль окна (в CreateParams) и реализовал обработчик для WM_HSCROLL .Попутно я использую SetScrollRange и SetScrollPos для управления диапазоном и положением дорожки для большого пальца, но маленькая загвоздка остается почти идеальным квадратом.
Что я упускаю из виду?
Решение
В документации рекомендуется использовать SetScrollInfo
, а не SetScrollRange
и SetScrollPos код>.
Как указывает ответ Ваутера Вам также необходимо установить размер страницы. Положение и диапазон сообщают ОС, где находится центр большого пальца, но размер страницы говорит, какой диапазон виден, и это , который определяет размер большого пальца. Для этого вы должны использовать SetScrollInfo
; в качестве бонуса он позволяет вам одновременно устанавливать позицию, диапазон и размер страницы.
TCustomControl
отличается от TWinControl
только одним: у него есть холст. TScrollingWinControl
также отличается только одним способом: у него есть полосы прокрутки. Добавление холста к потомку TScrollingWinControl
должно быть намного проще, чем добавление полос прокрутки к потомку TCustomControl
& # 8212; это меньше кода для копирования и вставки из исходного кода VCL. Измените базовый класс вашего элемента управления, а затем посмотрите, где вы находитесь.
Даже если это не вариант, вам все равно стоит посмотреть, как TScrollingWinControl
и TControlScrollBar
работают вместе.
Другие советы
Вы можете использовать PageSize
свойство влиять на размер большого пальца.
Пример:
ScrollBar1.Min := 0;
ScrollBar1.Max := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;
Будет выглядеть как: