2016-12-05 11 views
4

Легко обнаружить ли вертикальная полоса прокрутки в TScrollBox находится на самом верху или нет:Как определить, находится ли полоса прокрутки в самом низу?

IsScrollBarAtTop := ScrollBox1.VertScrollBar.Position = 0; 

enter image description here

Но как я могу определить, является ли вертикальная полоса прокрутки в TScrollBox находится на очень НИКТО или нет?

enter image description here

+0

идейку «из коробки» .... Так свитка-бар предназначается, чтобы быть производным абстрактное представление о том, где вы находитесь в _whatever вы scrolling_; возможно, лучший подход заключается в том, чтобы взглянуть на то, что находится в базовом представлении. Например. для текстового редактора/зрителя: находитесь ли вы в последней строке файла? –

ответ

8

Вы можете получить информацию о полосе прокрутки через 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; 
+0

Название книги также может быть: «Умные решения WinAPI для Delphi». – user1580348

+0

@user Delphi здесь не имеет отношения к делу. Это Win32-контроль и ответ Win32. Код может быть написан на любом языке. VCL - это свободная обертка вокруг win32, которая делает это проще. Многие программисты Delphi боятся других языков и не будут читать код, написанный на любом другом языке. Это большая слабость. Не бойся. Выучите достаточно C++ для того чтобы прочитать образец образца C++ Win32 и написать простые программы C++ и вы получите доступ к гораздо более ценной информации. –

5

От Vcl.Forms.TControlScrollBar.Range:

Диапазон представляет собой виртуальный размер (в пикселях) клиентской области ассоциированного элемента управления. Например, если диапазон горизонтальной полосы прокрутки формы, установлен в положении 500, а ширина формы 200, Положение полосы прокрутки может изменяться от 0 до 300.

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

Если диапазон меньше, чем высота прокрутки, полоса прокрутки не видна.

+0

Хотелось бы узнать, сможет ли кто-нибудь подтвердить это. Это концептуально то же, что и решение WinAPI. Но проще и без копания лукового слоя. –

+1

@CraigYoung, да это работает, просто попробовал :-) –

+0

Прохладный спасибо, я знаю, что вы не смогли раньше. –

 Смежные вопросы

  • Нет связанных вопросов^_^