
A mellékelt példaprogram megnyitása előtt a QRStringGrid.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A komponenst a TQRPrintable osztályból fogjuk származtatni, mint általában minden új QuickReport komponenst. Az elkészítéshez azonban több osztályt is létre kell hoznunk.
Az egyik ilyen osztály a TQRStringGridColumns, ami a TQRStringGridCollection-ból származik, és a táblázat oszlopainak adatait tartalmazza. A TQRStringGridCollection osztály a TOwnedCollection-ból lett származtatva, és csupán egy új eljárást tartalmaz ahhoz képest. Ez az Invalidate-t, ami frissíti a táblázat képét.
Minden oszlophoz egy TQRStringGridColumn típusú osztály tartozik. A táblázat első sora tartalmazza az oszlopok fejléceit, melyeket a táblázat elemeitől eltérően formázhatunk. Az Alignment property-ben meghatározhatjuk a fejléc felirat igazítását, ez történhet balra (taLeftJustify), középre (taCenter), illetve jobbra (taRightJustify). A Coor property-ben megadhatjuk a cella háttérszínét, a Width property-ben a szélességét, a Caption property-ben pedig a feliratát (címét). A TextAlignment property-ben az oszlop elemeinek igazítását adhatjuk meg, hasonlóan a fejléc szövegének igazításához.
A komponens neve a StringGrid-re utal, azonban a táblázat elemeinek megadása inkább hasonlít a ListView elemeinek megadásához.
Az elemeknek szintén külön osztályokat készítünk. A TQRStringGridItems szintén a TQRStringGridCollection osztályból származik, és TQRStringGridItem típusú elemeket tartalmaz. Ez utóbbi osztály a táblázat egy-egy sorát tartalmazza, leszámítva az első sort, amiben az oszlop fejlécei vannak. A Caption property-ben adhatjuk meg a sor első cellájában lévő feliratot, a Color property-ben pedig ennek a cellának a színét. A Strings property TStringList típusú, és ez tartalmazza az adott sorban lévő cellák szövegeit. Az első sor a második celláé, a második elem a harmadiké, és így tovább.
A táblázat tehát a következőképpen néz ki:
- a táblázat oszlopainak száma megegyezik a Columns property elemeinek számával;
- az első sor celláinak szövegét a Columns property adott elemnek Caption property-je tartalmazza;
- a második sortól lefelé a cellák tartalmát az Items property elemei adják meg;
- az első oszlop tartalmát az Items property elemeinek Caption property-je határozza meg (a 2. sortól lefelé);
- a második oszlop, és az attól jobbra lévő cellák elemeit az Items property adott elemének Strings property-jében tárolt sorok adják meg (a 2. sortól lefelé).
A TQRStringGrid osztály a következő property-kkel rendelkezik:
- Columns: a táblázat oszlopainak tulajdonságai;
- Items: a táblázat elemeinek tulajdonságai;
- Font: a táblázat elemeinek betűtípusa;
- HeaderFont: a táblázat fejlécének betűtípusa;
- Grid: rácsvonalak ki- és bekapcsolása;
- GridColor: a rácsvonalak színe;
- GridWeight: a rácsvonalak vastagsága;
- RowHeight: a sorok magassága;
- Color: a táblázat celláinak színe (leszámítva az első sort és oszlopot);
A TQRPrintable osztályból származó komponenseket kétféleképpen kell megrajzolni, attól függően, hogy a képernyőn, vagy nyomtatásban jelennek-e meg. Az előzőhöz a Paint, az utóbbihoz pedig a Print eljárást kell felülírnunk. A különböző megrajzolás abból adódik, hogy két különböző Canvas-ra kell rajzolni, és a képernyő, valamint a nyomtató felbontása közötti különbségek miatt a méretek is eltérnek. Megfelelő módszerrel azonban ez a kis probléma kiküszöbölhető, és a rajzolási eljárást elég egyszer elkészíteni. Ha az FPrinter globális logikai típusú változó értéke igaz, akkor a nyomtató Canvas-ára, ellenkező esetben a komponens Canvas-ára rajzolunk.
A komponens megrajzolása cellánként történik. Egy cella területének koordinátáit a CellRect függvény adja vissza egy TRect típusú struktúrában. Ennek a függvénynek van egy X és Y paramétere, melyek a terület kiszámításához kellenek, tehát nem a cella azonosítására szolgálnak. Ez utóbbit a harmadik paraméterben, egy TPoint struktúrában kell megadni. Ennek x mezője adja meg az oszlopot, az y mezője pedig a sort.
A cella megrajzolását közvetetten a PaintTo eljárás végzi. Ennek X és Y paramétere megegyezik a CellRect függvény ugyanezen paramétereivel. A Printer paraméter azt adja meg, hogy a nyomtató, vagy a képernyő (komponens) Canvas-ára kell-e rajzolni. A tényleges rajzolást a DrawCell eljárás végzi el.