如果您打开记事本,添加十行并调整编辑器大小以仅显示九行,则拇指轨迹(滚动条上的可拖动块)几乎是垂直滚动条的整个长度。如果你添加几千行,拇指轨迹只有几个像素高。
我想在我实现水平滚动条的TCustomControl后代中复制这个行为。因此,我在我的窗口样式(用CreateParams)中添加了WS_HSCROLL,并为WM_HSCROLL实现了一个处理程序。在此过程中,我使用SetScrollRange和SetScrollPos来管理拇指轨迹的范围和位置-但这个小but仍然是一个近乎完美的正方形。
我遗漏了什么?
发布于 2009-09-11 01:52:47
The documentation建议使用SetScrollInfo,而不是SetScrollRange和SetScrollPos。
正如Wouter's answer所指出的,您还需要设置页面大小。位置和范围告诉操作系统拇指的中心所属的位置,但是页面大小告诉操作系统多少范围是可见的,这就决定了拇指的大小。为此,您必须使用SetScrollInfo;另外,它允许您一次设置位置、范围和页面大小。
TCustomControl与TWinControl只有一个不同之处:它有一个画布。TScrollingWinControl也只有一个不同之处:它有滚动条。向TScrollingWinControl子体添加画布应该比向TCustomControl子体添加滚动条容易得多-从VCL源代码复制和粘贴的代码更少。更改控件的基类,然后查看您所处的位置。
即使这不是一种选择,您仍然可以看看TScrollingWinControl和TControlScrollBar是如何协同工作的。
发布于 2009-09-11 01:44:51
可以使用PageSize属性来影响拇指大小。
示例:
ScrollBar1.Min := 0;
ScrollBar1.Max := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;将如下所示:

https://stackoverflow.com/questions/1408434
复制相似问题