Delphi - Nem adatbázisból származó adatok kinyomtatása

Nyomtatás a Rave komponensekkel 7. rész

forráskód letöltése
Ebben a részben megismerkedünk az RvCustomConnection komponens használatával. Megnézzük, hogy hogyan lehet egyszerűen kinyomtatni egy memória tömb, vagy bármely más lista tartalmát. Megismerkedünk az RvCustomConnection, RvDataSetConnection, RvTableConnection, valamint az RvQueryConnection komponensek eseményeivel.
Az RvConnection komponens különbözik az eddig megismert adatkapcsolatot biztosító komponensektől. Itt semmilyen tulajdonságot nem találunk az Object Inspector-ban, amely segítségével kapcsolatot tudnánk létesíteni egy adatszerkezet és a Report között.
Az RvCustomConnection, RvDataSetConnection, RvTableConnection, valamint az RvQueryConnection komponensek ugyanazokkal az eseményekkel rendelkeznek. Azt, hogy egy adat milyen formában kerüljön megjelenítésre, vagy kerüljön-e egyáltalán megjelenítésre, az eseményeken keresztül tudjuk befolyásolni.
Az RvCustomConnection komponens esetében nincs is más lehetőségünk arra, hogy kinyomtassuk adatainkat. Ez a komponens szolgál arra, hogy a nem adatbázisból származó adatokat is könnyedén ki tudjuk nyomtatni.
Kezdjünk egy új Delphi alkalmazást. Hozzunk létre egy privát láthatósággal rendelkező memória tömböt, az alábbi deklarációval.
Numbers: array[0..9] of Integer;
Ebben a tömbben számokat fogunk tárolni, melyeket a Random függvénnyel hozunk létre. Ezeket a számokat fogjuk kinyomtatni az alábbi formában.
1. szám: 4589
Helyezzünk el a Form-on egy RvCustomConnection és egy RvProject komponenst.
Az adatkapcsolatot a Rave Report és a Delphi alkalmazás között, tehát nekünk kell biztosítani, mégpedig forráskódból, az RvCustomConnection1 objektum eseményein keresztül.
Az OnOpen esemény hivatott arra, hogy az adatok inicializálását végrehajtsa. A Numbers tömböt ezért itt töltjük fel számokkal. Az RvCustomConnection komponenssel tudatnunk kell a megjelenítendő adatok számát. Ezt a DataRows tulajdonságon keresztül állíthatjuk be, ugyancsak forráskódból.
Connection.DataRows:=10;
A használni kívánt mezőszerkezetet a z OnGetCols eseményben állíthatjuk be.
Az adatmezők beállításánál a WriteField metódust kell meghívnunk. A metódus a következő szintaktikával rendelkezik.
WriteField
procedure WriteField(
Name: String;
DataType: TRpDataType;
Width: Integer;
FullName: String;
Description: String
);
Paraméterek
Name: String
A mező rövid neve.
DataType: TRpDataType
A mező típusát határozza meg. Az itt megadható értékek a következők: dtString, dtInteger, dtBoolean, dtFloat, dtCurrency, dtBCD, dtDate, dtTime, dtDateTime, dtBlob, dtMemo, dtGraphic.
Width: Integer
A mező hossza.
FullName: String
A mező hosszú neve.
Description: String
A mező leírása. Hosszabb, több soros szöveget is tartalmazhat.
A példaprogramban egy Text nevű mezőt hoztunk létre, amely maximum 30 karakter hosszú szöveg tárolására alkalmas.
Connection.WriteField('Text',dtString,30,'Text','');
Ha meghatároztuk a használni kívánt adatszerkezetet, akkor nincs más hátra, minthogy minden egyes megjelenítendő sor számára beállítsuk a megjelenítendő értékeket. Ehhez az OnGetRow eseményt használhatjuk.
Az esemény létrejön minden egyes alkalommal, mielőtt a Rave megjelenítene egy újabb sort az adatszerkezetből. Itt láthatjuk el az OnGetCols eseményben létrehozott mezőt tartalommal.
Connection.WriteStrData('',IntToStr(Connection.DataIndex+1)+'. szám: '+IntToStr(Numbers[Connection.DataIndex]));
A DataIndex tulajdonság az éppen megjelenítendő adat sorszámát adja vissza. Az első elem számozása 0-val kezdődik, az utolsó elem pedig DataRows-1.
Az OnGetCols eseményben az alábbi metódusokat használhatjuk, a megjelenítendő adat típusának megfelelően:
WriteStrData(FormatData: String; NativeData: String); {dtString}
WriteIntData(FormatData: String; NativeData: Integer); {dtInteger}
WriteBoolData(FormatData: String; NativeData: Boolean); {dtBoolean}
WriteFloatData(FormatData: String; NativeData: Extended); {dtFloat}
WriteCurrData(FormatData: String; NativeData: Currency); {dtCurrency}
WriteBCDData(FormatData: String; NativeData: Currency); {dtBCD}
WriteDateTimeData(FormatData: String; NativeData: TDateTime); {dtDate, dtTime, dtDateTime}
WriteBlobData(var Buffer; len: LongInt); {dtBlob, dtMemo, dtGraphic}
A FormatData paraméter az adatmegjelenítés formátumát, még a NativeData magát az adat értéket határozza meg.
Mentsük el a Delphi alkalmazást, majd indítsuk el a Rave Visual Designer-t.
Hozzunk létre egy új projectet. Létesítsünk kapcsolatot az RvCustomConnection1 objektummal, a sorozat negyedik részben tanult módon.
Amikor létrejött a DataView1 objektum, a Project Tree-ben kattintsunk rá az egyetlen mezőjének nevére. Ennek a mezőnek a neve FieldName. A mező rövid és hosszú nevét is módosítsuk Text-re, ugyanis a Delphi alkalmazásban ezt a mezőnevet adtuk meg. A kettőnek, muszáj megegyeznie.
A Tools – Report Wizards – Simple Table menüpont segítségével indítsuk el a Report varázslót és készítsük el a Report vázát. Ha elkészült a váz, módosítsuk az objektumok elrendezését és az általuk megjelenítendő szövegeket ízlésünknek megfelelően.
Az RvCustomConnection használata esetén szerkesztési időben nem állnak rendelkezésre az adatok, ezért, ha le akarjuk ellenőrizni munkánkat az F9 billentyű lenyomásával, az adatok nem fognak megjelenni.
Ha készen vagyunk, mentsük el a Rave projectet ugyanabba a könyvtárba, ahová a Delphi alkalmazást mentettük. A mentett állomány neve legyen project1.rav.
Zárjuk be a Rave Visual Designer-t, majd térjünk vissza a Delphi-be. Az RvProject1 objektum ProjectFile tulajdonságában adjuk meg a project1.rav állományt. Helyezzünk el egy Button objektumot a Form-on. OnClick eseményébe írjuk az alábbi kódot.
RvProject1.Execute;
Mentsük el munkánkat és próbáljuk ki.
Végül egy táblázat, amely összefoglalja az eseményeket és működésüket.
Események:
Esemény Funkciója
OnEof Az esemény az Eof logikai típusú változón keresztül tájékoztat minket arról, hogy a tábla végére értünk-e. Értéke csak akkor igaz, ha a rekordmutató a tábla végén áll.
OnFirst Az esemény akkor jön létre, amikor a Rave a rekordmutatót a legelső rekordra állítja.
OnGetCols A használni kívánt adatszerkezet beállítására szolgál.
OnGetRow Az esemény minden egyes sor beolvasása előtt létrejön. A megjelenítendő adatok beállítására szolgál.
OnGetSorts Az esemény akkor jön létre, amikor a Rave lekérdezi a rendelkezésre álló rendezési metódusokat.
OnNext Az esemény akkor jön létre, amikor a rekordmutató a következő elemre pozícionál.
OnOpen Az esemény akkor jön létre, amikor a Rave inicializálja a Data Session-t. Itt inicializálhatjuk a megjelenítendő adatokat.
OnRestore Az esemény akkor jön létre, amikor a Rave visszaállítja a Data Session-t.
OnSetFilter Az esemény akkor jön létre, amikor a Rave rekordszűrést alkalmaz a táblán, például egy master-detail kapcsolat esetén.
OnSetSort Az esemény akkor jön létre, amikor a Rave adatrendezést hajt végre.
OnValidateRow Az esemény minden egyes rekord megjelenítése előtt létrejön. Ebben az eseményben beállíthatjuk, hogy egy rekord megjelenjen, vagy ne jelenjen meg nyomtatáskor.

Nyomtatás a Rave komponensekkel cikksorozat