Как мне изменить размер трек-полосы полосы прокрутки - PullRequest
3 голосов
/ 11 сентября 2009

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

Я хотел бы продублировать это поведение в потомке TCustomControl, где я реализовал горизонтальную полосу прокрутки.Поэтому я добавил WS_HSCROLL в свой стиль окна (в CreateParams) и реализовал обработчик для WM_HSCROLL.Попутно я использую SetScrollRange и SetScrollPos для управления диапазоном и положением дорожки большого пальца - но маленький жучок остается почти идеальным квадратом.

Чего мне не хватает?

Ответы [ 2 ]

7 голосов
/ 11 сентября 2009

Вы можете использовать свойство PageSize, чтобы влиять на размер большого пальца.

Пример:

ScrollBar1.Min      := 0;
ScrollBar1.Max      := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;

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

Page Size

4 голосов
/ 11 сентября 2009

В документации рекомендуется использовать SetScrollInfo вместо SetScrollRange и SetScrollPos.

Как указывает Wouter , вам также необходимо установить размер страницы. Положение и диапазон сообщают ОС, где находится центр большого пальца, но размер страницы указывает, какая часть диапазона видна, а это , который определяет размер большого пальца. Вы должны использовать SetScrollInfo для этого; в качестве бонуса он позволяет вам одновременно устанавливать позицию, диапазон и размер страницы.


TCustomControl отличается от TWinControl только одним: у него есть холст. TScrollingWinControl отличается только одним способом: у него есть полосы прокрутки. Добавление холста к потомку TScrollingWinControl должно быть намного проще, чем добавление полос прокрутки к потомку TCustomControl - это меньше кода для копирования и вставки из исходного кода VCL. Измените базовый класс вашего элемента управления, а затем посмотрите, где вы находитесь.

Даже если это не вариант, вам все равно стоит посмотреть, как TScrollingWinControl и TControlScrollBar работают вместе.

...