Как мне изменить размер трек-полосы полосы прокрутки

Если вы откроете Блокнот, добавите десять строк и измените размер редактора, чтобы отобразить только девять, дорожка большого пальца (перетаскиваемый блок на полосе прокрутки) почти равна длине вертикальной полосы прокрутки. Если вы добавите пару тысяч строк, дорожка большого пальца будет высотой всего в несколько пикселей.

Я хотел бы продублировать это поведение в потомке 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;

Будет выглядеть так:

Размер страницы

Другие вопросы по тегам