TDBAdvGrid proportional scrollbar

I am using TDBAdvGrid with PageMode = true and ScrollProportional = true. I have implemented event OnGetRecordCount so that grid knows total number of records. Size of scrollbar is realy proportional but it always remains on top of scroll are like this:

Is this a feature or bug ? Is there a way how to force the component to behave correctly ?

It is only when grid.PageMode = false that proportional scrolling is fully possible and this is by design.
For PageMode = true, the grid only shows the visible records from the dataset and other than the state that the DB cursor is in
the start / middle / end, the grid doesn't know more information from the dataset.
This is the same with the regular VCL TDBGrid.

More information about TMS TDBAdvGrid & PageMode can be found here:

But then what is motivation to switch to TMS grid instead of standard VCL grid ? It is simple solution but from user point of view it doesnt get much sense. When the user sees that scrollbox is in the middle, he expects that it is currently in the middle of some huge database with million rows. It get sense from the point of view of developer because it stems from TDataSet interface: TDataSet::Eof, TDataSet::Bof. But the user is not interested in what is under the hood. If it is not too hard to change this behaviour I would welcome it.

If grid only sees visible records than what is the purpose of calling OnGetRecordCount ?

In PageMode = true, this behavior cannot be changed. The behavior is driven by the dataset. If the dataset does not provide any more info with respect to cursor position than : first, middle, last, that is the only information the grid can use to position the scrollbar. So, the behavior of the scrollbar is inherent to the behavior of the dataset. When PageMode = false, all records are retrieved from the dataset and the grid can determine by itself where the selected row is within all rows.