Delphi - QuickReport paletta komponensei

QuickReport paletta 1. rész

forráskód letöltése
Ezzel a cikkel induló sorozatunkban a Delphi-ben megtalálható nyomtatáshoz használható komponensekkel (QuickReport paletta) fogunk részletesebben megismerkedni, természetesen konkrét példán keresztül (számlakészítő program). A komponens csomag főleg az adattábláinkban tárolt adatok megfelelő formában történő kinyomtatására lett kihegyezve, de természetesen a táblák nélküli szöveg (levél...) nyomtatása is megvalósítható. Összehasonlítva a piacon beszerezhető (Delphi-be integrálható) riport készítő komponensekkel, megállapítható hogy a QuickReport tudása, stabilitása elmarad a többiétől, de kezelhetősége, megértése egyszerűbb. Összességében elmondható, hogy egy adatbázist használó, hagyományos ügyviteli alkalmazás nyomtatási igényeit messzemenően ki tudja elégíteni. Használatával gyorsan tudunk kinézetre is szép, tagolt listákat előállítani. Egyik nagy előnye, hogy nem kell külön beszerezni, a Delphi-vel együtt kapjuk.

A QuickReport használatát egy példán keresztül mutatjuk be:

Készítünk egy számla nyomtató programot, amely néhány adatállományból állítja elő részünkre a kívánt számlaformátumot, és a különböző listákat, riportokat. Ez a program cikkről cikkre haladva fokozatosan bővül az egyes funkciókkal.
A program 3 táblát használ: vevők, számlafej, számlatétel.

Egy riport szinte minden esetben sávokból épül fel: fejléc, lábléc, riport fejléc/lábléc, ismétlődő adatok... Ezekbe a sávokba kell majd nekünk elhelyeznünk a nyomtatandó tételeket (adatmezők, szövegmezők, speciális mezők). A sávok a típusukra jellemző helyen jelennek meg a nyomtatási képen (fejléc: lap tetején stb.), egyszerű és látványos módon tagolva ezzel a listánkat.

Nézzük először is az alapkomponenst: TQuickRep.

Ez a komponens minden egyes nyomtatási munka alapját képezi. Ez a befogadója az összes többi komponensnek ezen a palettán. Egy üres Form-ra kell elhelyezni, és rögtön láthatóvá válik egy A4-es lapot ábrázoló kép. Ezen lehet majd elhelyezni a különböző sávokat, és a többi komponenst. A komponensen duplán kattintva egy beállítási ablak jelenik meg, ezek a jellemzők az Object Inspector property oldalán is elérhetőek, de ott egy kicsit nehezebb megtalálni őket.

Fontosabb property-k:
  • Dataset: a nyomtatás alapját képező adatforrás, amely lehet TTable, TQuery, TStoredProc. Több összekapcsolt tábla esetén itt a Master táblát adjuk meg.
  • Bands: különféle sávokat (Band-eket) lehet a riporthoz hozzárendelni egyetlen kattintással.
  • Frame: a riport köré keretet lehet vele húzni.
  • Functions: előre definiált, illetve általunk létrehozott kifejezéseket tudunk ebben a speciális TList-szerű property-ben megadni. Ezekre a kifejezésekre pl. egy TQrExpr Expression property-jében hivatkozhatunk, a kifejezés aktuális értéke nyomtatás előtt újra kiértékelődik (pl.: a PAGENUMBER minden oldalon az aktuális oldalszámot mutatja).
Tipp: kiválasztott kifejezés képletének lekérdezése futási időben:
procedure TForm1.FormShow(Sender: TObject);
var
  func: TQREvEmbeddedFunction;
begin
  func := TQREvEmbeddedFunction(QuickRep1.Functions.Objects[1]);
  SHowMessage(func.Expression);
end;
  • Page: lapméretet, margót lehet beállítani. Fontos tulajdonság itt a Columns, amely alapesetben 1-en áll. Ha ezt pl. 2-re állítjuk, akkor a riport két részre tagolódik, a nyomtatás ezáltal két oszlopban történik, jobban kihasználva a papír felületét (címkék nyomtatásánál használható).
  • PrinterSettings: nyomtatási példányszám, kezdő és befejező oldal megadása.
  • Units: a léptéket lehet különféle mértékegységekre állítani.
  • Zoom: nagyítás, kicsinyítés.
  • RecordNumber: nyomtatás alatt lévő rekord sorszáma (DataSet-ben beállított adatforrásban).
Fontosabb metódusok:
  • Preview: a riportot megmutatja a képernyőn. Alapértelmezésben a beépített preview-t használja, amelyen található néhány egyéb funkciót ellátó nyomógomb is: nyomtatás, nyomtató beállító, zoom, lapozó...
  • Print: az alapértelmezett nyomtatóra küldi a riportot.
  • Prepare: tulajdonképpen ez a funkció "állítja" össze a riportot, építi fel annak összes elemét. A kiszámítandó mezők (QrLabel, QrExpr, QrSys...) ekkor kapnak értéket. Normális esetben a Prepare a Print és a Preview előtt automatikusan lefut.
  • AddBand: futási időben adhatunk újabb Band-et a riportunkhoz. Hasznos ez olyan listáknál, amelyek "többfunkciósak", pl.: van olyan eset, ahol kell a lista végén összegezni, és van olyan ahol pedig nem kell.
  • ExportToFilter: a paraméterben megadott filternek megfelelően menti el a riportot.

Példa (mentés HTML formátumban):
procedure MyForm.ButtonClick(Sender : TObject);
var
  AExportFilter : TQRHTMLDocumentFilter;
begin
  AExportFilter := TQRHTMLDocumentFilter.Create('REPORT.HTM');
  try
    MyReport.ExportToFilter(AExportFilter)
  finally
    AExportFilter.Free;
  end;
end;
  • NewColumn: a nyomtatás új oszlopban folytatódik.
  • NewPage: lapdobás.
  • PrinterSetup: nyomtató beállítási ablak hívása.

Fontosabb események:
  • BeforePrint: nyomtatás, illetve preview előtt fut le az itt elhelyezett kód. Remekül használható olyan esetekben, amikor futási időben állítjuk össze a riportot. Itt hozhatjuk létre a különféle QrLabel-eket, QrDbtext-eket... Készíthetünk olyan listát is a használatával, amely hasonló szerkezetű adatállományokból nyomtat, de csak közvetlenül a nyomtatás előtt derül ki, hogy melyik táblából kell nyomtatni. Ebben az esetben a QrDbText-ekhez itt tudjuk hozzárendelni a megfelelő DataSource-t és DataField-et.
  • OnPreview: abban az esetben vehetjük hasznát, ha nem akarjuk a beépített preview képernyőt használni, hanem egy saját magunk által készítettet szeretnénk alkalmazni.
  • OnEndPage, OnStartPage: lap végén, és lap elején fut le ez az esemény.
  • OnNeedData: nem adatforrás alapján történő nyomtatásnál használhatjuk. Az eseményhez rendelt kód mindaddig lefut, amíg a MoreData paraméternek hamis értéket nem adunk.

QuickReport paletta cikksorozat