Как мне изменить размер дорожки прокрутки на панели прокрутки

StackOverflow https://stackoverflow.com/questions/1408434

Вопрос

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

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

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

Page Size

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top