A feladat megoldásához először is le kell kérdeznünk a StringGrid függőleges (vagy adott esetben vízszintes) görgetősávjának adatait egy TScrollInfo struktúrába. Mielőtt azonban ezt megtennénk, a struktúra cbSize mezőjében meg kell adnunk a struktúra méretét, az fMask mezőben pedig a SIF_ALL értéket, ami az összes adat lekérdezését határozza meg
A lekérdezés a GetScrollInfo függvénnyel történik meg.

GetScrollInfo
Osztály:
function GetScrollInfo(
hWnd: HWND;
BarFlag: Integer;
var ScrollInfo: TScrollInfo
): BOOL; stdcall;
Ezzel a függvénnyel egy ablak függőleges vagy vízszintes görgetősávjának adatait kérdezhetjük le.
Paraméterek
hWnd: HWND
Az ablak leíróját adhatjuk meg ebben a property-ben.
BarFlag: Integer
Ebben a paraméterben kell megadnunk, hogy a vízszintes (SB_HORZ), vagy a függőleges (SB_VERT) görgetősáv adatait akarjuk-e lekérdezni.
var ScrollInfo: TScrollInfo
Ebben a paraméterben kell megadnunk azt a TScrollinfo típusú struktúrát, amelybe az adatokat várjuk.
Visszatérési érték
A függvény visszatérési értéke igaz, ha a lekérdezés sikerült, és hamis, ha nem.
Nézzük meg egy kicsit részletesebben, hogy hogyan is néz ki a TScrollInfo struktúra.
tagSCROLLINFO = packed record
cbSize: UINT;
fMask: UINT;
nMin: Integer;
nMax: Integer;
nPage: UINT;
nPos: Integer;
nTrackPos: Integer;
end;
TScrollInfo = tagSCROLLINFO;
A cdSize és fMask mezőkről már volt szó. Az nMin és nMax mezőben a görgetősáv által reprezentált intervallum alsó és felső határértékét adhatjuk meg. Az nPage mezőben az intervallum látható tartományát adhatjuk meg, az nPos mezőben az aktuális pozíciót, az nTrackPos mezőben pedig a görgetősáv pozícióját.
Ha az nPage mező értéke 0, akkor a görgetősáv nem arányosan mutatja a látható és nem látható részeket, tehát ezt kell módosítanunk a megfelelő értékre. Itt van egy probléma, ugyanis a StringGrid görgetősávjának nMin értéke mindig 0, és ami a problémát jelenti: az nMax értéke mindig 127, függetlenül a sorok számától. Ebből következik, hogy az nPage mezőben nem a látható sorok számát kell megadnunk, hanem egy aránypárral kiszámított értéket:
nPage:=Round(VisibleRowCount*(nMax-nMin)/RowCount);
Emiatt a számítási módszer miatt nem mindig kapunk kielégítő eredményt.
Az fMask mezőben a SIF_PAGE értéket kell megadnunk jelezve, hogy ezt az adatot szeretnénk csak módosítani. Ezután a SetScrollInfo függvénnyel aktualizálhatjuk az új adatokat.
A beállításokat mindig frissíteni kell, amikor a komponens mérete megváltozik, hiszen akkor a látható sorok száma is változhat.