문제

메모장을 열고 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;

다음과 같이 보일 것입니다.

Page Size

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top