HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

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;


Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


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!

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