9

很容易检测 a 的垂直滚动条是否TScrollBox在最顶部:

IsScrollBarAtTop := ScrollBox1.VertScrollBar.Position = 0;

在此处输入图像描述

但是如何检测 a 的垂直滚动条是否TScrollBox位于最底部?

在此处输入图像描述

4

2 回答 2

12

您可以通过 API 检索滚动条信息并确定其是否位于底部。

function IsScrollBarAtBottom(Box: TScrollBox): Boolean;
var
  Info: TScrollInfo;
begin
  Info.cbSize := SizeOf(Info);
  Info.fMask := SIF_POS or SIF_RANGE or SIF_PAGE;
  Win32Check(GetScrollInfo(Box.Handle, SB_VERT, Info));
  Result := Info.nPos >=  Info.nMax - Info.nMin - Info.nPage;
end;
于 2016-12-05T10:14:22.757 回答
9

Vcl.Forms.TControlScrollBar.Range

Range 表示关联控件的客户区的虚拟大小(以像素为单位)。例如,如果窗体的水平滚动条的 Range 设置为 500,窗体的宽度为 200,则滚动条的 Position 可以在 0 到 300 之间变化。

IsScrollBarAtBottom :=  ScrollBox1.VertScrollBar.Position =
  (ScrollBox1.VertScrollBar.Range - ScrollBox1.ClientHeight);

如果范围小于滚动框的高度,则滚动条不可见。

于 2016-12-05T09:14:57.380 回答