|
|
Automatikus nyomtatási dokumentum készítése
|
|
Példaprogram letöltése
10595 bájt
|
Vajon egy QuickReport összeállításánál mennyi időt töltünk azzal, hogy létrehozzuk a QRBand-eket, elhelyezzük rajta a QRLabel és QRDBText stb. komponenseket, beállítjuk a tulajdonságukat, stb. Mennyivel egyszerűbb lenne, ha mindezt automatikusan végezné el helyettünk, mondjuk egy komponens. Ez a komponens mostantól rendelkezésre áll.
A mellékelt példaprogram megnyitása előtt az AutoReport.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A komponens következő tulajdonságait tudjuk megadni:
- ColumnDistance: az oszlopok közötti távolság.
- Dataset: TDataset osztályból származó komponens (pl. TTable vagy TQuery).
- Header: a fejléc sor szövege
- Title: a report címe ami az első oldalon középen, nagy betűvel jelenik meg.
A komponenshez tartozik egy QuickReport komponens is, ami az elkészítendő report alapja. Ez természetesen módosítható, de a meglévő komponensek törlése hibát okozhat!
A report elkészítésekor a komponens figyelembe veszi a mezők igazítását, szélességét, és azt, hogy egyáltalán meg kell-e jeleníteni.
A report generálása az Execute eljárás meghívásával kezdődik. Ennek egy paramétere van, melynek értékei a következők egyike lehet:
- arPreview: nyomtatási kép megjelenítése;
- arPrint: eredmény küldése a nyomtatóra.
Ellenőrizzük, hogy a dataset property-ben adtak-e meg adatbázist. Ha nem, akkor generálunk egy hibát. Ezt tesszük abban az esetben is, ha a megadott adatbázis nincs megnyitva.
if not Assigned(FDataset) then begin
Raise ERangeError.Create('No Dataset selected!');
Exit;
end;
if FDataset.Active=false then begin
Raise ERangeError.Create('Dataset not opened!');
Exit;
end;
Létrehozzuk a QuickReport-ot, és beállítjuk a Dataset property-jét a komponens Dataset property-jének értékére.
QRep:=TAutoReportQr.Create(self);
QRep.DataSet:=FDataset;
Ahhoz, hogy az oszlopok szélessége arányos legyen a mezők szélességével, meg kell tudni a mezők szélességének összegét. Természetesen csak azokat a mezőket vesszük figyelembe, amelyek megjelennek a report-ban. Ezt a műveletet végzi el az alábbi ciklus.
MaxFieldsWidth:=0;
for i:=0 to FDataset.Fields.Count-1 do begin
if FDataset.Fields[i].Visible then begin
inc(MaxFieldsWidth, FDataset.Fields[i].DisplayWidth);
end;
end;
A rf változóban eltárolunk egy értéket, amely az oszlopok szélességének kiszámításkor kerül felhasználásra.
rf:=(QRep.QRBandDetail.Width-(Fdataset.Fields.Count-1)*FColumnDistance) / MaxFieldsWidth;
Egy ciklussal végigmegyünk az adatbázis mezőin, és azoknak a mezőknek, melyeknek a Visible tulajdonsága igaz, létrehozunk egy QRDBText komponenst a Detail Band-en, illetve egy QRLabel komponenst a ColumnHeader Band-en. Az x változóban tároljuk ezeknek a komponenseknek az X koordinátáját, tehát a létrehozás után növelni kell a mező szélességével, illetve az oszlopok közötti távolsággal. Ha nem lenne a ColumnDistance property, akkor például egy jobbra igazított és az utána következő balra igazított oszlop adata közvetlenül egymás mellé kerülnének.
Ha megvannak az adatmezők, akkor beállítjuk a report fejlécét és címét, majd a mode paramétertől függően megjelenítjük, vagy kinyomtatjuk a QuickReport-ot. A megjelenítés a PreviewModal függvénnyel történik, tehát a program futása addig nem folytatódik, amíg a felhasználó be nem zárta az ablakot. Miután ez megtörtént, illetve a report-ot kinyomtattuk, töröljük a QuickReport-ot.
QRep.QRLabelTitle.Caption:=FTitle;
QRep.QRLabelHeader.Caption:=FHeader;
case mode of
arPreview: QRep.PreviewModal;
arPrint: QRep.Print;
end;
QRep.Free;
end;
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 474. 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!
|