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