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

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

我错过了什么?

有帮助吗?

解决方案

文档建议使用 SetScrollInfo 而不是 SetScrollRange SetScrollPos

Wouter的回答指出,您还需要设置页面大小。位置和范围告诉操作系统拇指中心所在的位置,但页面大小告诉它可以看到多少范围, 决定拇指大小的因素。您必须使用 SetScrollInfo ;作为奖励,它可以让您一次性设置位置,范围和页面大小。


TCustomControl TWinControl 的区别在于:它有一个画布。 TScrollingWinControl 也只有一种方式不同:它有滚动条。将画布添加到 TScrollingWinControl 后代应该比向 TCustomControl 后代添加滚动条要容易得多#8212;从VCL源代码复制和粘贴的代码较少。更改控件的基类,然后查看您的位置。

即使这不是一个选项,你仍然可以看看 TScrollingWinControl TControlScrollBar 如何协同工作。

其他提示

您可以使用 PageSize 属性来影响缩略图尺寸。

示例:

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

看起来像:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top