HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Automatikus report generáló komponens


Példaprogram letöltése

15748 bájt


Egyik korábbi cikkünkben egy olyan komponenst készítettünk, amely egy lekérdezés vagy tábla adataiból automatikusan előállított egy QuickReport-ot. Ez a most bemutatandó komponens az előzőnél jóval többet tud: lehet benne összesen sort is megadni, akár mindegyik mezőhöz egy-egy összesített értékkel, amit szintén egy tábla vagy lekérdezés szolgáltat, illetve megadhatunk egy mezőt, amely szerint csoportosítva jeleníti meg az adatokat.

A mellékelt példaprogram megnyitása előtt a ReportGenEx.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A komponens a következő property-kkel rendelkezik:
  • Title: a report címe;
  • Dataset: az adatkészlet objektuma, amiből a report készül;
  • ColumnDistance: az oszlopok közötti távolság;
  • HeaderLine1: a fejléc első sora;
  • HeaderLine2: a fejléc második sora;
  • PageOrientation: az oldal tájolása;
  • GroupFieldName: annak a mezőnek a neve, amely szerint az adatokat csoportosítani szeretnénk;
  • ListFont: a lista betűtípusa;
  • HeaderFont: a fejléc betűtípusa;
  • TitleFont: a címsor betűtípusa;
  • SumDataSet: az összesített adatokat tartalmazó adatkészlet objektuma;
  • MarginLeft: bal margó (milliméterben);
  • MarginRight: jobb margó;
  • MarginTop: felső margó;
  • MarginBottom: alsó margó;
A Table vagy Query komponensben hozzunk létre minden mezőhöz egy-egy objektumot. Az objektumok Tag property-jében beállíthatjuk a betű stílusát. A Tag property ugyan nem erre való, de mivel a tetszőlegesen felhasználható, ezért ez tökéletesen megfelel számunkra. Az érték első három bitjével szabályozhatjuk a stílust. Az első bit a félkövér, a második a dőlt, a harmadik pedig az aláhúzott stílust állítja be. Ha például a Tag property értéke 3, akkor a stílus félkövér-dőlt lesz. Ha az objektum Visble property-je hamis, akkor az a mező nem jelenik meg a report-on. A DisplayWidth property-vel szabályozhatjuk, hogy az adott mező milyen szélességű lesz. A megadott érték nem konkrétan a mező szélességét határozza meg, mivel az a többi mező szélességétől is függ. A komponens ugyanis úgy helyezi el a mezőket, hogy az oldal teljes szélességét kihasználja. Ha például van két mezőnk, az egyiknél a DisplayWidth értéke 1, a másiknál pedig 3, akkor az első mező szélessége az oldal szélességének egynegyede, a másiké pedig a háromnegyede lesz.

A komponenshez tartozik egy QuickReport is (ReportGenExQrep.pas), amely tartalmazza a report alapjául szolgáló komponenseket. Ennek azért van értelme, mert így nem kell minden komponenst futásidőben létrehozni.

A report generálása az Execute eljárásban történik. Ez egy meglehetősen hosszú eljárás, ezért nézzük lépésenként az egyes műveleteket.
Egy ciklusban megszámoljuk a megjelenítendő mezők számát (VisibleFields), és ezek szélességét is összesítjük, ami abból áll, hogy a DisplayWidth property-k értékét összeadjuk (MaxFieldsWidth). Az összesítésnél nem vesszük figyelembe azokat a mezőket, amiket meg sem jelenítünk, illetve azt, amelyik szerint csoportosítjuk az adatokat (GroupFieldName).
Ezután a kapott értékekből kiszámolunk egy értéket, amivel beszorozva a mezők DisplayWidth property-jeinek értékét, megkapjuk a mező QuickReport-beli szélességét.
  rf:=(QRep.QRBandDetail.Width-(VisibleFields-1)*FColumnDistance) / MaxFieldsWidth;
Ezután a property-k értékének megfelelően beállítjuk a QuickReport és az azon található Band-ek tulajdonságait.
A következő ciklusban létrehozunk minden mezőnek egy QRText objektumot a ColumnHeader Band-en, és egy QRDBText komponenst a Detail Band-en. A csoportosító mezőnek csak egy QRDBText komponens kell, amit viszont a Group Band-re teszünk. A mezők pozícióit eltároljuk egy dinamikus tömbben (Pos), mivel ezekre a következő ciklusban szükségünk lesz.
A QuickReport-on van egy Summary Band is, amin az összesített értékeket jelenítjük meg. Azt, hogy az adott összesített érték melyik mezőhöz tartozik, az összesített érték objektumának Tag property-jében adhatjuk meg. Ebben a property-ben a mező indexét kell megadni. A Pos tömbből egyszerűen kiolvashatjuk az adott mező pozícióját.
Az eljárás végén a létrehozott objektumokat felszabadítjuk.



Cikksorozat

#IDKategóriaCikk címeSorozat
1166DelphiOsztály hierarchia lekérdezése1. rész
1180DelphiOsztály hierarchia lekérdezése2. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 564. 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 |