很容易检测 a 的垂直滚动条是否TScrollBox
在最顶部:
IsScrollBarAtTop := ScrollBox1.VertScrollBar.Position = 0;
但是如何检测 a 的垂直滚动条是否TScrollBox
位于最底部?
很容易检测 a 的垂直滚动条是否TScrollBox
在最顶部:
IsScrollBarAtTop := ScrollBox1.VertScrollBar.Position = 0;
但是如何检测 a 的垂直滚动条是否TScrollBox
位于最底部?
您可以通过 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;
从Vcl.Forms.TControlScrollBar.Range:
Range 表示关联控件的客户区的虚拟大小(以像素为单位)。例如,如果窗体的水平滚动条的 Range 设置为 500,窗体的宽度为 200,则滚动条的 Position 可以在 0 到 300 之间变化。
IsScrollBarAtBottom := ScrollBox1.VertScrollBar.Position =
(ScrollBox1.VertScrollBar.Range - ScrollBox1.ClientHeight);
如果范围小于滚动框的高度,则滚动条不可见。