Как определить, находится ли полоса прокрутки в самом низу?
3 ответа
Решение
Вы можете получить информацию о полосе прокрутки через 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;
Из http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TControlScrollBar.Range:
Диапазон представляет виртуальный размер (в пикселях) клиентской области связанного элемента управления. Например, если диапазон горизонтальной полосы прокрутки формы установлен на 500, а ширина формы - 200, положение полосы прокрутки может варьироваться от 0 до 300.
IsScrollBarAtBottom := ScrollBox1.VertScrollBar.Position =
(ScrollBox1.VertScrollBar.Range - ScrollBox1.ClientHeight);
Если диапазон меньше высоты полосы прокрутки, полоса прокрутки не отображается.
важным значением является положение содержимого... ScrollBox.ViewportPosition Я искал его некоторое время, и он не упоминался ни в каких обсуждениях, поэтому я заявляю об этом. (Delphi 10.2, FMX)