如果打开记事本,添加十行并调整编辑器大小仅显示九,拇指轨道(滚动条上的可拖动块)几乎是垂直滚动条的全长。如果添加几千行,则拇指轨道只有几个像素高。
我想在TCustomControl后代复制这个bahaviour,在那里我实现了一个水平滚动条。所以我将WS_HSCROLL添加到我的窗口样式(在CreateParams中)并为WM_HSCROLL实现了一个处理程序。在此过程中,我使用SetScrollRange和SetScrollPos来管理拇指轨道的范围和位置 - 但是小虫子仍然是一个近乎完美的广场。
我错过了什么?
答案 0 :(得分:7)
您可以使用PageSize
属性来影响拇指大小。
示例:
ScrollBar1.Min := 0;
ScrollBar1.Max := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;
看起来像:
答案 1 :(得分:4)
The documentation建议使用SetScrollInfo
而不是SetScrollRange
和SetScrollPos
。
如Wouter's answer所述,您还需要设置页面大小。位置和范围告诉操作系统拇指中心所在的位置,但页面大小告诉它可以看到多少范围, 决定拇指大小的因素。你必须使用SetScrollInfo
;作为奖励,它可以让您一次性设置位置,范围和页面大小。
TCustomControl
与TWinControl
的区别仅在于一种方式:它有一个画布。 TScrollingWinControl
只有一种方式不同:它有滚动条。将画布添加到TScrollingWinControl
后代应该比向TCustomControl
后代添加滚动条要容易得多 - 从VCL源代码复制和粘贴的代码更少。更改控件的基类,然后查看您的位置。
即使这不是一个选项,您仍然可以查看TScrollingWinControl
和TControlScrollBar
如何协同工作。