3

如果您打开记事本,添加十行并将编辑器调整为仅显示九行,则拇指轨道(滚动条上的可拖动块)几乎是垂直滚动条的全长。如果添加几千行,拇指轨道只有几个像素高。

我想在实现水平滚动条的 TCustomControl 后代中复制这种行为。所以我将 WS_HSCROLL 添加到我的窗口样式(在 CreateParams 中)并为 WM_HSCROLL 实现了一个处理程序。在此过程中,我使用 SetScrollRange 和 SetScrollPos 来管理拇指轨道的范围和位置 - 但这个小家伙仍然是一个近乎完美的正方形。

我错过了什么?

4

2 回答 2

7

您可以使用该PageSize属性来影响拇指大小。

例子:

ScrollBar1.Min      := 0;
ScrollBar1.Max      := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;

看起来像:

页面大小

于 2009-09-11T01:44:51.083 回答
4

该文档建议使用SetScrollInfo而不是SetScrollRangeand SetScrollPos

正如Wouter 的回答所指出的,您还需要设置页面大小。位置和范围告诉操作系统拇指中心所属的位置,但页面大小告诉它有多少范围是可见的,就是决定拇指大小的因素。您必须为此使用SetScrollInfo;作为奖励,它允许您一次设置位置、范围和页面大小。


TCustomControl仅在一个方面有所不同TWinControl:它有一个画布。TScrollingWinControl也只有一个方面不同:它有滚动条。向后代添加画布TScrollingWinControl应该比向TCustomControl后代添加滚动条容易得多——从 VCL 源代码复制和粘贴的代码更少。更改控件的基类,然后查看您的位置。

即使这不是一种选择,您仍然可以很好地了解如何TScrollingWinControl一起TControlScrollBar工作。

于 2009-09-11T01:52:47.150 回答