2009-09-11 63 views
3

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

我想重复这个bahaviour在TCustomControl后裔,我实现了一个水平滚动条。所以我将WS_HSCROLL添加到我的窗口样式(在CreateParams中)并实现了WM_HSCROLL的处理程序。一路上,我使用SetScrollRange和SetScrollPos来管理范围和拇指轨迹的位置 - 但小小的肛交者仍然是一个近乎完美的方形。

我错过了什么?

+0

Cobus,您的代码示例对您的帮助非常有用。 – RRUZ 2009-09-11 01:34:46

+0

@RRUZ:不,绝对没有必要。如果你想看看怎么不这样做,看看没有比VCL网格控制更远。如果你想看看如何做到这一点,看看VirtualTree,Sy​​nEdit或任何其他正常工作的控制。它们的源代码可用。 – mghie 2009-09-11 05:08:46

+0

嗨,这是一个更相关的问题:你如何添加滚动到控件本身,是否有一个TScrollbar是TCustomControl后代类的成员? – wmercer 2012-02-19 22:16:45

回答

4

The documentation建议使用SetScrollInfo而不是SetScrollRangeSetScrollPos。因为Wouter's answer指出,你还需要设置页面大小。位置和范围告诉操作系统拇指中心所在的位置,但页面尺寸告诉它该范围有多少可见,而决定了拇指大小。你必须使用SetScrollInfo;作为奖励,它可让您一次设置位置,范围和页面大小。


TCustomControlTWinControl不同之处只是一种方法:它有一个画布。 TScrollingWinControl也有不同之处:它有滚动条。将画布添加到TScrollingWinControl后代应该比将滚动条添加到TCustomControl后代要容易得多 - 从VCL源代码复制和粘贴的代码更少。改变你的控件的基类,然后看看你在哪里。

即使这不是一个选项,你仍然可以好好看看TScrollingWinControlTControlScrollBar如何一起工作。

+0

+1,但从长远来看,我不确定从'TScrollingWinControl'继承的工作是否较少。至少在Win9X上,它也严重限制了可用的滚动范围(16位坐标)。即使在NT行上,它也会将行数限制为2^31'div'(行高),以像素为单位。我宁愿使用'SetScrollInfo()'并计算代码中的所有内容。 – mghie 2009-09-11 05:13:58

+0

我不同意你的答案的TScrollingWinControl部分,部分原因是我的滚动需要相当复杂。但是我使用了SetScrollInfo,它的工作原理很好,谢谢。 – 2009-09-14 10:14:07

7

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

例子:

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

看起来像:

Page Size

+1

+1很高兴有一个视觉!很好的触摸 – Argalatyr 2009-09-11 01:49:43

+0

这是在滚动条控件?我正在使用窗口上的滚动条。 – 2009-09-11 07:24:09

相关问题