TWebStringGrid and scrolling

We are using TMS Web Core 2.7.2.2. The current TWebStringGrid implementation is restrictive regarding scrolling in the following three ways:

  1. it only supports scrolling the data rows/columns (the normal cells)
  2. it assumes that all rows have the same height
  3. it assumes that the first not fixed column is visible.

Extension proposal 1:
The more general scrolling case is, that you want to scroll the whole grid horizontally and vertically with the fixed rows and fixed columns being fixed. But this is only possible, if the top-level span element of the grid (the span element with the grid's id) is the scrolling element/parent, and if the fixed rows/columns get a sticky position through CSS. We therefore propose an extension to the TWebStringGrid which allows to define (by a new public or published property) what grid element is actually the scrolling element/parent (default=current implementation=data rows/columns, grid=extension).

Extension proposal 2:
If you look at the current implementation of the functions GetTopRow and SetTopRow, they assume that all table rows have the DefaultRowHeight, even at runtime and are thus not well-suited for grids with varying row heights. We therefore propose to change this to work with the actual row heights at runtime.

Extension proposal 3:
The function GetVisibleRowCount, which, in contrast to GetTopRow and SetToRow, takes the actual row heights into account, should first check whether the first non-fixed column (column with index FixedCols) is actually visible and, if not, should determine the first visible one to get reasonable row heights later on.

With these three extensions, navigating a grid with the cursor keys would then scroll a grid as expected. We already implemented the suggested extensions at our site and we could provide you the code, if you want.

We will consider 2 & 3.
For 1, it is modeled after the VCL TStringGrid and therefore mimics this behavior.