HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

StringGrid komponens függőleges görgetősávjának módosítása úgy, hogy arányosan mutassa a látható és nem látható részeket


Példaprogram letöltése

4613 bájt

Alapesetben a StringGrid komponens görgetősávja mindig négyzet alakú, és nem mutatja arányosan a látható és a nem látható sorok viszonyát. A mellékelt példában változtatunk ezen, és úgy módosítjuk a görgetősáv tulajdonságait, hogy arról leolvasható legyen, hogy a látható sorok a teljes táblázaton belül hol, és milyen arányban helyezkednek el.

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.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 319. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |