use*_*348 7 delphi scrollbar tscrollbox delphi-10.1-berlin
很容易检测到a的垂直滚动条TScrollBox是否位于最顶层:
IsScrollBarAtTop := ScrollBox1.VertScrollBar.Position = 0;
Run Code Online (Sandbox Code Playgroud)
但是如何检测a的垂直滚动条TScrollBox是否处于非常底部?
Ser*_*yuz 11
您可以通过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;
Run Code Online (Sandbox Code Playgroud)
来自Vcl.Forms.TControlScrollBar.Range:
范围表示关联控件的客户端区域的虚拟大小(以像素为单位).例如,如果窗体的水平滚动条的范围设置为500,并且窗体的宽度为200,则滚动条的位置可以在0到300之间变化.
IsScrollBarAtBottom := ScrollBox1.VertScrollBar.Position =
(ScrollBox1.VertScrollBar.Range - ScrollBox1.ClientHeight);
Run Code Online (Sandbox Code Playgroud)
如果范围小于滚动框的高度,则滚动条不可见.