delphi 如何检测滚动条是否在最底部?

pxyaymoc  于 2023-06-05  发布在  其他
关注(0)|答案(3)|浏览(231)

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

IsScrollBarAtTop := ScrollBox1.VertScrollBar.Position = 0;

但是,我如何检测TScrollBox的垂直滚动条是否在最底部?

pbossiut

pbossiut1#

您可以通过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;
8hhllhi2

8hhllhi22#

Vcl.Forms.TControlScrollBar.Range
Range表示关联控件的工作区的虚拟大小(以像素为单位)。例如,如果窗体水平滚动条的“范围”设置为500,窗体的宽度为200,则滚动条的“位置”可以在0到300之间变化。

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

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

pw136qt2

pw136qt23#

重要的价值是内容的位置…我一直在寻找它一段时间,它没有在任何讨论中提到,所以我陈述它。( Delphi )

相关问题