스크롤바의 썸트랙 크기를 조정하는 방법
-
05-07-2019 - |
문제
메모장을 열고 10줄을 추가하고 9줄만 표시하도록 편집기 크기를 조정하면 썸 트랙(스크롤 막대에서 드래그 가능한 블록)이 수직 스크롤 막대의 거의 전체 길이가 됩니다.수천 개의 행을 추가하면 썸 트랙의 높이는 불과 몇 픽셀에 불과합니다.
수평 스크롤 막대를 구현한 TCustomControl 하위 항목에 이 동작을 복제하고 싶습니다.그래서 내 창 스타일(CreateParams)에 WS_HSCROLL을 추가하고 WM_HSCROLL에 대한 처리기를 구현했습니다.그 과정에서 저는 SetScrollRange와 SetScrollPos를 사용하여 썸 트랙의 범위와 위치를 관리합니다. 하지만 이 작은 놈은 거의 완벽한 정사각형으로 남아 있습니다.
내가 무엇을 놓치고 있나요?
해결책
문서 사용을 권장합니다 SetScrollInfo
오히려 SetScrollRange
그리고 SetScrollPos
.
처럼 바우터의 답변 즉, 페이지 크기도 설정해야 합니다.위치와 범위는 엄지손가락의 중심이 속하는 위치를 OS에 알려주지만, 페이지 크기는 표시되는 범위의 정도를 알려줍니다. 그건 엄지손가락의 크기를 결정하는 것은 무엇입니까?당신은 사용해야합니다 SetScrollInfo
그에 대한;보너스로 위치, 범위, 페이지 크기를 한 번에 설정할 수 있습니다.
TCustomControl
~와 다르다 TWinControl
한 가지 방법으로:캔버스가 있습니다. TScrollingWinControl
한 가지 면에서도 다릅니다.스크롤바가 있습니다.캔버스에 캔버스 추가하기 TScrollingWinControl
하위 항목에 스크롤 막대를 추가하는 것보다 훨씬 쉬울 것입니다. TCustomControl
자손 — VCL 소스 코드에서 복사하여 붙여넣는 데 드는 코드가 적습니다.컨트롤의 기본 클래스를 변경한 다음 현재 위치를 확인하세요.
비록 그것이 선택 사항이 아니더라도, 여전히 방법을 살펴보는 것이 좋습니다. TScrollingWinControl
그리고 TControlScrollBar
협력.
다른 팁
당신은 사용할 수 있습니다 PageSize
엄지 크기에 영향을 미치는 속성.
예시:
ScrollBar1.Min := 0;
ScrollBar1.Max := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;
다음과 같이 보일 것입니다.