23. Vytvß°enφ sestav

Tato kapitola obsahuje nßsledujφcφ sekce:


Na╣e prvnφ sestava

QuickReport je prou╛kov² generßtor sestavy. Na╣e sestavy jsou budovßny ze sekcφ (prou╛k∙) s textov²mi a grafick²mi komponentami na nich. Tyto prou╛ky jsou replikovßny k znßzorn∞nφ na╣ich dat k vytvo°enφ finßlnφ sestavy. Jednoduchß sestava m∙╛e obsahovat tyto komponenty na formulß°i: K vytvo°enφ sestavy provedeme tyto kroky: K prohlΘdnutφ sestavy, v mφstnφ nabφdce komponenty TQuickRep zvolφme Preview. Zobrazφ se okno s na╣φ sestavou. Se sestavou nynφ m∙╛eme pracovat p°i nßvrhu, ale m∙╛eme s nφ chtφt takΘ pracovat za b∞hu. K aktivaci sestavy za b∞hu musφme provΘst tyto kroky: Kdy╛ nynφ spustφme aplikaci a stiskneme tlaΦφtko, pak uvidφme sestavu. K p°φmΘmu tisku sestavy m∙╛eme mφsto Preview volat metodu Print.
Tφm mßme vytvo°enou sestavu typu jednoduchΘho seznamu. V nßsledujφcφch bodech se seznßmφme s vytvß°enφm v╣ech typ∙ sestav.

R∙znΘ typy prou╛k∙

Je d∙le╛itΘ se seznßmit s r∙zn²mi typy prou╛k∙. Po expandovßnφ vlastnosti Bands komponenty TQuickRep m∙╛eme p°idßvat a odstra≥ovat ╣est nejobecn∞j╣φch typ∙ prou╛k∙. Prou╛ky jsou zobrazovßny na komponent∞ TQuickRep v po°adφ v jakΘm budou tisknuty.
Prou╛ky mohou b²t takΘ p°idßny vlo╛enφm komponenty TQRBand z Palety komponent na komponentu TQuickRep. Musφme potom nastavit vlastnost BandType na p°φslu╣nou hodnotu. Je takΘ vhodnΘ dßvat komponentßm prou╛k∙ popisnß jmΘna, jako PageHeaderBand, DetailBand apod. Toto je v╣e provedeno automaticky, pokud p°idßme prou╛ek pomocφ vlastnosti Bands komponenty TQuickRep.
Mimo t∞chto prou╛k∙ jsou prou╛ky pro vytvß°enφ skupin a sestav Master-detail.

P°ipojovßnφ dat

QuickReport m∙╛e zφskßvat data z mnoha typ∙ zdroj∙ dat. Obvykle p°ipojφme na╣i sestavu ke komponent∞ datovΘ mno╛iny, jako je TTable nebo TQuery. Datovß mno╛ina m∙╛e b²t na stejnΘm formulß°i jako sestava, na jinΘm formulß°i v na╣em projektu nebo v datovΘm modulu. Pak nastavφme vlastnost DataSet komponenty TQuickRep na tuto datovou mno╛inu. Datovß mno╛ina musφ b²t aktivnφ; nenφ-li pak sestavu nelze generovat.

Filtrovßnφ a °azenφ dat

QuickReport nemß ╛ßdnou slu╛bu na °azenφ dat. Data jsou v╛dy vypisovßna v po°adφ jejich dodßvßnφ datovou mno╛inou. Po°adφ m∙╛eme ovliv≥ovat aktivnφm indexem komponenty TTable nebo klauzulφ ORDER BY v p°φkazu SQL komponenty TQuery.
Filtrovßnφ dat lze provßd∞t n∞kolika zp∙soby. Lze vyu╛φt mo╛nosti filtrovßnφ datov²ch mno╛in. Dal╣φ mo╛nostφ je pou╛itφ obsluhy udßlosti BeforePrint na╣eho detailnφho prou╛ku k zapφnßnφ a vypφnßnφ tisku. Nßsleduje p°φklad tΘto obsluhy:
void __fastcall TForm1::DetailBand1BeforePrint(TQRCustomBand *Sender,
      bool &PrintBand)
{
  PrintBand = Table1->FieldByName("Company")->AsString > "H";
}

P°idßvßnφ textu a datov²ch polo╛ek

K v²pisu textu na sestav∞, p°idßme na sestavu tisknutelnΘ komponenty. Dv∞ zßkladnφ tisknutelnΘ komponenty jsou TQRLabel a TQRBDBText.
Komponenta TQRLabel se pou╛φvß k v²pisu statickΘho textu nebo textu a Φφsel vytvo°en²ch na╣φ aplikacφ v pr∙b∞hu generovßnφ sestavy. K v²pisu statickΘho textu pouze umφstφme komponentu na prou╛ek, urΦφme jejφ pozici a po╛adovan² text p°i°adφme do jejφ vlastnosti Caption. Text se nynφ bude zobrazovat na prou╛ku a bude vypisovßn v tΘto relativnφ pozici v╛dy p°i v²pisu samotnΘho prou╛ku.
Modifikacφ vlastnosti Font m∙╛eme zm∞nit pou╛itΘ pφsmo a jeho barvu. QuickReport podporuje libovolnΘ pφsmo TrueType nebo PostScript.
Vlastnost Caption m∙╛eme m∞nit v libovolnΘ obsluze udßlosti v pr∙b∞hu generovßnφ sestavy.To umo╛≥uje provΘst v²poΦty nebo operace s °et∞zci v k≤du a v²sledek zobrazit v sestav∞.
DatabßzovΘ polo╛ky mohou b²t vypisovßny pomocφ komponenty TQRDBText. Umφstφme ji na prou╛ek a vlastnostφ DataSet ji p°ipojφme k tabulce nebo dotazu, kterou chceme vypisovat na formulß°. Pak vybereme polo╛ku ve vlastnosti DataField.
M∙╛eme takΘ pou╛φt komponentu TQRExpr k v²pisu statickΘho nebo dynamickΘho textu a databßzovΘ polo╛ky.

Vytvß°enφ sestav

Prvnφm krokem p°i vytvß°enφ QuickReport je vytvo°enφ formulß°e k vlo╛enφ na╣φ komponenty TQuickRep. Na tento formulß° se odkazujeme jako na Sestavov² formulß°, nebo╗ pracuje jako kontejner pro na╣i sestavu a nikdy jej nebude zobrazovat koncov² u╛ivatel na╣φ aplikace. Sestavov² formulß° je uvßd∞n ve Sprßvci projektu a tedy je vhodnΘ jej pojmenovat tak, aby bylo jasnΘ, ╛e se jednß o Sestavov² formulß°. Nap°. v╣echna jmΘna Sestavov²ch formulß°∙ mohou zaΦφnat rep.
Druh²m krokem je vlo╛enφ komponenty TQuickRep na nß╣ sestavov² formulß°. Jeliko╛ mßme pojmenovanΘ formulß°e k popisu sestavy, je vhodnΘ dßvat v╣em komponentßm sestavy stejnΘ jmΘno. Jednodu╣e nazveme komponentu TQuickRep jmΘnem Report a budeme se potom na ni odkazovat jako na repCustomerListing->Report, repSalesListing->Report, atd.

M°φ╛ka, jednotky a zv∞t╣ovßnφ

Kdy╛ umφstφme komponentu TQuickRep na formulß°, pak vidφme m°φ╛ku, kterß nßm pomßhß p°i umis╗ovßnφ komponent. M°φ╛ka je zobrazena v souΦasn²ch jednotkßch QuickReport. Prßv∞ aktivnφ jednotky vybereme ve vlastnosti Units komponenty TQuickRep. Kdy╛ zm∞nφme tuto vlastnost, pak m°φ╛ka se zm∞nφ.
Na v∞t╣in∞ monitor∙ mßme problΘmy se zobrazenφm celΘ komponenty TQuickRep, nebo╗ p°ebφrß velikost aktußln∞ vybranΘ velikosti papφru. K zobrazenφ v∞t╣φ Φßsti komponenty m∙╛eme zm∞nit vlastnost Zoom. Tuto vlastnost m∙╛eme takΘ pou╛φvat p°i umis╗ovßnφ d∙le╛it²ch detail∙.

Velikost papφru a okraje

Nastavovat na╣i strßnku m∙╛eme expandovßnφm vlastnosti Page komponenty TQuickRep. Po expandovßnφ vlastnosti vidφme v╣echny podvlastnosti °φdφcφ rozvr╛enφ strßnky. Hodnoty jsou v prav∞ zadan²ch jednotkßch. Vybran² okraj je znßzorn∞n jako modrß Φßrkovanß Φßra okolo komponenty TQuickRep. Prou╛ky jsou umφst∞ny mezi okraji.
Vlastnostφ Orientation urΦujeme, zda papφr je umφst∞n na ╣φ°ku nebo na v²╣ku a vlastnostφ Ruler vypφnßme nebo zapφnßme zobrazovßnφ m°φ╛ky.
PaperSize m∙╛e nab²vat n∞kterou z nßsledujφcφch hodnot: Letter, LetterSmall, Tabloid, Ledger, Legal, Statement, Executive, A3, A4, A4Small, A5, B4, B5, Folio, Quarto, qr10X14, qr11X17, Note, Env9, Env10, Env11, Env12, Env14, CSheet, DSheet a ESheet.
Jednß se o v╣echny implicitnφ velikosti papφr∙ definovanΘ ve Windows. V²b∞rem velikosti papφru jsou automaticky nastaveny vlastnosti PaperLength a PaperWidth. M∙╛eme takΘ nastavit PaperSize na Custom a zadat PaperLength a PaperWidth podle pot°eby. Ne v╣echny tiskßny podporujφ v╣echny velikosti papφru. Pokud jsme vybrali papφr velikosti, kter² na╣φ tiskßrnou nenφ podporovßn, pak p°i p°φprav∞ sestavy je automaticky p°epnuta velikost na implicitnφ papφr. Implicitnφ velikost papφru je uΦena v nastavenφ tiskßrny.

Vybφrßnφ pφsma

Implicitnφ pφsmo pro na╣i sestavu je urΦeno vlastnostφ Font komponenty TQuickRep. Z dostupn²ch pφsem je vhodnΘ pou╛φvat pφsma TrueType a PostScripts; SystΘmovß pφsma jsou takΘ dostupnß ale jsou omezena pouze na n∞kterΘ velikosti.
Implicitn∞, v╣echny komponenty na sestav∞ zd∞dφ pφsmo nastavenΘ pro sestavu. Pro libovolnou komponentu na sestav∞ m∙╛eme nastavit vlastnφ pφsmo. Definici pφsma m∙╛eme takΘ p°episovat na ·rovni prou╛ku.

Titulek a popis sestavy

Sestava m∙╛e mφt titulek a popis. Tyto vlastnosti jsou d∙le╛itΘ pro identifikaci a popis sestavy v na╣i aplikaci. Obvykle mßme seznam v╣ech na╣ich sestav a zobrazφme popis, kdy╛ u╛ivatel sestavu vybere. Titulek m∙╛eme takΘ vypsat na sestav∞ pomocφ komponenty TQRSysData.

P°idßvßnφ prou╛k∙

QuickReport je generßtor sestav zalo╛en² na prou╛cφch a tedy prou╛ky jsou znaΦn∞ d∙le╛itou Φßstφ sestavy. Pokud se podrobn∞ji seznßmφme s prou╛kov²mi generßtory sestav, pak m∙╛eme °φci, ╛e prou╛ek je malß papφrovß ╣ablona, kterß se kopφruje na strßnku a zapl≥uje daty. R∙znΘ ╣ablony jsou kopφrovßny na r∙znΘ Φßsti strßnky (sestavy).
Nejsnadn∞j╣φ mo╛nostφ pro p°idßvßnφ prou╛k∙ je pomocφ roz╣φ°enΘ vlastnosti Bands komponenty TQuickRep. Vidφme zde seznam obecn²ch prou╛k∙ a m∙╛eme zadßvat, zda jednotlivΘ prou╛ky se vyskytujφ nebo nevyskytujφ na sestav∞. M∙╛eme p°idat nebo zru╣it prou╛ek pouhou zm∞nou false na true nebo naopak. Kdy╛ prou╛ek je vytvo°en tφmto zp∙sobem, pak zφskß popisnΘ jmΘno, jako DetailBand1, PageHeaderBand1 apod. Typ prou╛ku je takΘ nastaven automaticky.
Prou╛ky m∙╛eme takΘ p°idßvat komponentou TQRBand. V tomto p°φpad∞ musφme nastavit po╛adovan² typ prou╛ku a dßt mu popisnΘ jmΘno. Vlastnost Bands v Inspektoru objekt∙ takΘ ukazuje takto p°idanΘ prou╛ky.
Typy prou╛k∙, kterΘ na sestavu m∙╛eme p°idßvat t∞mito dv∞mi zp∙soby jsou:
 
PageHeader Prvnφ prou╛ek zobrazovan² na v╣ech strßnkßch. Jeho zobrazovßnφ na prvnφ strßnce zßvisφ na vlastnosti TQuickRep->Options->FirstPageHeader. Implicitn∞ na prvnφ strßnce nenφ uvßd∞n.
Title Titulnφ prou╛ek je prvnφm prou╛kem vypisovan²m v sestav∞ (po p°φpadnΘm hlaviΦkovΘm prou╛ku na prvnφ strßnce). Zde obvykle uvßdφme titulek sestavy, v²b∞rovß kritΘria, datum a Φas vytvo°enφ apod.
ColumnHeader Prou╛ek hlaviΦek sloupc∙ je vypisovßn v hornφ Φφsti ka╛dΘ sloupcovΘ sestavy. V normßlnφ jednosloupcovΘ sestav∞ je tento prou╛ek vypisovßn pouze jednou na strßnce, pod hlaviΦkou strßnky (a titulnφm prou╛kem na prvnφ strßnce). Pro vφce sloupcovΘ sestavy je vypisovßn jednou pro ka╛d² sloupec. Je u╛iteΦn² pro v²pis jmen polo╛ek.
Detail Jeden detailnφ prou╛ek je vypisovßn pro ka╛d² zßznam (°ßdek) dat v na╣i datovΘ mno╛in∞. Je to nejd∙le╛it∞j╣φ prou╛ek v na╣φ sestav∞ a obvykle zabφrß nejvφce mφsta ve v²slednΘ sestav∞. Obvykle obsahuje tisknutelnΘ ovladaΦe (TQRDBText a dal╣φ).
Summary Za v╣emi detailnφmi pßsky m∙╛eme zobrazit souΦtov² prou╛ek. Pou╛φvß se pro v²pis souΦt∙ Φφseln²ch polo╛ek.
PageFooter Poslednφ prou╛ek vypisovan² na v╣ech strßnkßch. Zda bude i na poslednφ strßnce zßvisφ na vlastnosti TQuickRep->Options->LastPageFooter. Implicitn∞ na poslednφ strßnce nenφ vypisovßn.

Kdy╛ prou╛ky p°idßme na sestavu, pak jsou automaticky umφst∞ny v jejich zobrazovacφm po°adφ. Vidφme, ╛e prou╛ek hlaviΦky strßnky je prvnφ, nßsleduje jej titulnφ prou╛ek, prou╛ek hlaviΦek sloupc∙ apod.
Typ prou╛ku je vypsßn v jeho dolnφm levΘm rohu mal²m pφsmem. To nßm pomßhß identifikovat prou╛ky p°i nßvrhu sestavy. Na v²slednΘ sestav∞ tento text vypisovßn nenφ.
Poznßmka: I kdy╛ je mo╛no manußln∞ p°idat prou╛ek a nastavit jeho typ na SubDetail nebo GroupHeader, nenφ to vhodnΘ. Tyto typy prou╛k∙ jsou rezervovßny pro komponenty TQRSubDetail a TQRGroup. Nastavenφ t∞chto typ∙ prou╛k∙ m∙╛e zp∙sobit p°i v²pisu sestavy chyby.

Nastavenφ velikosti prou╛ku

Prou╛ky zφskßvajφ svou vodorovnou velikost automaticky. Pro jednosloupcovΘ sestavy je to ╣φ°ka strßnky bez okraj∙. Jedinou mo╛nostφ zm∞nit ╣φ°ku prou╛ku je zm∞na okraj∙ (nebo velikosti papφru).
⌐φ°ka n∞kter²ch prou╛k∙ takΘ zßvisφ na vlastnosti Page->Columns komponenty TQuickRep. Pokud vytvß°φme vφcesloupcovou sestavu (jako telefonnφ seznam), pak ╣φ°ka nap°. detailnφho pßsku je urΦena dostupn²m mφstem pro jeden sloupec.
M∙╛eme zm∞nit svislou ╣φ°ku prou╛ku. Provedeme to v²b∞rem prou╛ku a zm∞nou jeho v²╣ky p°eta╛enφm my╣φ. Pokud v²╣ku prou╛ku chceme nastavit p°esn∞, pak m∙╛eme pou╛φt jeho vlastnost Size k nastavenφ p°esnΘ hodnoty s pou╛itφm aktußlnφch jednotek sestavy.
I kdy╛ m∙╛eme nastavit hodnotu pro ╣φ°ku prou╛ku v Inspektoru objekt∙, tato hodnota nenφ pou╛φvßna za b∞hu a je mo╛no ji pou╛φt pouze pro Φtenφ.

Po°adφ v²pisu prou╛k∙

Prou╛ky jsou zobrazovßny na komponent∞ TQuickRep v aktußlnφm vypisovacφm po°adφ. Je ale dobrΘ toto po°adφ pochopit. Obecn∞ prou╛ky jsou vypisovßny v tomto po°adφ:
HlaviΦka strßnky (bude uvßd∞nß na zaΦßtku ka╛dΘ strßnky)
Titulek (prvnφ strßnka)
HlaviΦka sloupc∙ zopakovanß pro v╣echny sloupce
Detail opakovan² pro v╣echny zßznamy
SouΦet (poslednφ strßnka)
PatiΦka strßnky (bude na konci v╣ech strßnek)
M∙╛e to b²t n∞kdy slo╛it∞j╣φ, pokud jsou vlo╛eny prou╛ky poddetail∙ a skupin, ale toto zßkladnφ schΘma platφ v╛dy.

Vypφnßnφ a zapφnßnφ prou╛k∙

M∙╛eme n∞kdy po╛adovat zakßzat v²pis prou╛ku v zßvislosti na n∞jakΘ podmφnce a to jak p°i nßvrhu nebo za b∞hu. P°i nßvrhu to provedeme nastavenφm vlastnosti Enabled komponenty TQRBand na false. Tato vlastnost m∙╛e b²t takΘ nastavena za b∞hu, p°ed generovßnφ sestavy nebo n∞jakΘ obsluze udßlosti b∞hem generovßnφ sestavy.
V pr∙b∞hu generovßnφ sestavy m∙╛eme takΘ doΦasn∞ zakßzat v²pis prou╛ku z obsluhy udßlosti prou╛ku BeforePrint. Tato udßlost mß parametr PrintBand, kter² m∙╛eme nastavit na false. Tφm potlaΦφme zobrazenφ prou╛ku pro souΦasn² zßznam datovΘ mno╛iny (je mo╛no pou╛φt jako filtr).
Podφvejme se znova na ji╛ uveden² p°φklad:
void __fastcall TForm1::DetailBand1BeforePrint(TQRCustomBand *Sender,
      bool &PrintBand)
{
  PrintBand = Table1->FieldByName("Company")->AsString > "H";
}
Pokud vypneme zobrazovßnφ patiΦky strßnky, pak zφskanΘ prßzdnΘ mφsto ve spodnφ Φßsti strßnky bude zapln∞no detailnφmi pßsky.

P°idßvßnφ tisknuteln²ch komponent na sestavu

K v²pisu n∞jak²ch informacφ v na╣i sestav∞, p°idßme tisknutelnΘ komponenty na prou╛ek. Je n∞kolik tisknuteln²ch komponent, kterΘ m∙╛eme vlo╛it na sestavu. Jsou uvedeny v nßsledujφcφ tabulce:
 
TQRLabel Vypisuje statick² text podobn∞ jako TLabel na formulß°i. Vlastnost Caption m∙╛e b²t v pr∙b∞hu generovßnφ sestavy m∞n∞na.
TQRDBText Vypisuje databßzovou polo╛ku (i BLOB) podobn∞ jako TDBText na formulß°i.
TQRExpr Vyhodnocuje a vypisuje v²raz QuickReport. 
TQRSysData Pou╛φvßno k v²pis∙ informacφ typu titulek sestavy, Φφslo strßnky, datu a Φas. N∞kterΘ z t∞chto informacφ mohou b²t takΘ vypisovßny komponentou TQRExpr.
TQRMemo Podobß se TQRLabel, s tφm ╛e akceptuje vφce°ßdkov² text. Obvykle pou╛φvßno pro dlouh² statick² text.
TQRRichText Vypisuje RichText formßtovan² text. M∙╛e b²t spojena s komponentou RichEdit na formulß°i a vypisovat jejφ obsah.
TQRDBRichText Datovß verze TQRRichText.
TQRShape Zobrazuje obdΘlnφky, kru╛nice a svislΘ nebo vodorovnΘ Φßry.
TQRImage Pou╛φvßno k v²pisu statick²ch obrßzk∙. Jsou pou╛itelnΘ bitovΘ mapy (BMP), metasoubory (WMF) nebo ikony.
TQRDBImage Datovß verze TQRImage. Zφskßvß obrßzek z BLOB polo╛ky.

O textov²ch komponentßch

V╣echny textovΘ komponenty QuickReport sdφlejφ zßkladnφ funkΦnost zd∞d∞nou od svΘho spoleΦnΘho p°edka. Jednß se o vlastnosti:

V²pis statickΘho textu

Statick² text jako hlaviΦky, titulky a jmΘna sloupc∙ jsou obvykle zobrazovßny komponentou TQRLabel. Pouze ji umφstφme na prou╛ek a nastavφme jejφ vlastnost Caption.
Pokud po╛adujeme dlouh² blok statickΘho textu, pak m∙╛eme pou╛φt komponentu TQRMemo. Toto nenφ datovß komponenta a vklßdat do nφ text m∙╛eme pomocφ vlastnosti Lines. Text m∙╛eme takΘ zavßd∞t za b∞hu z proudu nebo souboru pomocφ metod LoadFromStream nebo LoadFromFile vlastnosti Lines.

Vypisovßnφ databßzov²ch polo╛ek

Nejjednodu╣╣φ mo╛nostφ v²pisu polo╛ky z tabulky nebo dotazu je pou╛itφ komponenty TQRDBText. Pracuje podobn∞ jako TQRLabel, ale mφsto vlastnosti Caption mß vlastnosti DataSet a FieldName. Tφm p°ipojφme komponentu k libovolnΘ polo╛ce. Je mo╛no pou╛φvat v╣echny typy polo╛ek s v²jimkou polo╛ek BLOB. Kdy╛ vybereme polo╛ku, pak na nßvrhovΘm formulß°i je zobrazeno jejφ jmΘno. Nep°ipojenΘ polo╛ky nejsou zobrazeny.

Formßtovßnφ v²stupu

TQRDBText m∙╛e pou╛φt v╣echny formßtovacφ volby definovanΘ pro polo╛ku. Nejsou-li definovßny, pak polo╛ka je zobrazena v implicitnφm formßtu. Pro specifikaci formßtovßnφ pou╛ijeme vlastnost Mask polo╛ky. Maska pracuje r∙zn∞ pro r∙znΘ typy polo╛ek. ╚φselnΘ polo╛ky jsou formßtovßny pomocφ funkce FormatFloat. DatumovΘ a ΦasovΘ polo╛ky formßtujeme funkcφ FormatDataTime.

V²pis Memo polo╛ek

Memo polo╛ky jsou vypisovßny podobn∞ jako ostatnφ polo╛ky komponentou TQRDBText. M∙╛eme jim dßt jednotnou velikost nastavenφm AutoSize a AutoStretch na false a manußlnφm nastavenφm velikosti. Bude potom zobrazovßn pouze text, kter² se vejde do uvedenΘho obdΘlnφku.

V²pis tvar∙

Tvary jsou u╛iteΦnΘ pro vytvß°enφ vizußlnφch efekt∙ a k zlep╣enφ vzhledu sestavy. Tvary zobrazujeme pomocφ komponenty TQRShape. Komponentu umφstφme na prou╛ek a nastavφme jejφ vlastnost Shape na Rectangle, Circle, HorzLine, VertLine, LeftAndRight nebo TopAndBottom. Pomocφ vlastnosti Pen nastavφme ╣φ°ku a barvu pera a vlastnostφ Brush nastavφme styl a barvu ╣t∞tce.

StatickΘ obrßzky

Umφstφme komponentu TQRImage na prou╛ek a dvojit∞ klikneme na jejφ vlastnost Picture nebo na samotnou komponentu k vyvolßnφ dialogu Open Image. Nalezneme po╛adovan² obrßzek a stiskneme OK.

Zavßd∞nφ obrßzk∙ za b∞hu

K zavedenφ obrßzku za b∞hu, p°ed nebo v pr∙b∞hu generovßnφ sestavy pou╛ijeme metodu LoadFromFile vlastnosti Picture komponenty TQRImage.

Obrßzky ulo╛enΘ v tabulkßch

K zobrazenφ obrßzk∙ ulo╛en²ch v BLOB polo╛kßch pou╛φvßme TQRDBImage. Umφstφme komponentu na formulß° a nastavφme jejφ vlastnosti DataSet a DataField na BLOB polo╛ku obsahujφcφ obrßzek. QuickReport pak zavßdφ a zobrazuje obrßzek b∞hem generovßnφ sestavy.

Zobrazovßnφ formßtovanΘho textu

Formßtovan² text RichText m∙╛eme zobrazovat komponentami TQRRichText a TQRDBRichText. TQRRichText m∙╛e b²t p°ipojena na komponentu TRichText umφst∞nou na formulß°i v na╣i aplikaci pomocφ vlastnosti ParentRichEdit. Na sestav∞ je potom zobrazen obsah tΘto nad°φzenΘ komponenty.
Pro zobrazovßnφ RichText ulo╛enΘho v polo╛kßch BLOB pou╛φvßme komponentu TQRDBRichText.

Vytvß°enφ skupin

Komponentu TQRGroup nalezneme na strßnce QuickReport Palety komponent. Kdy╛ ji umφstφme na sestavu, pak se zobrazφ jako prou╛ek. Tento prou╛ek bude hlaviΦkou skupiny. V╛dy, kdy╛ skupina skonΦφ (nebo skonΦφ vy╣╣φ ·rove≥ skupiny) pak tento hlaviΦkov² prou╛ek bude zobrazen. Dßle m∙╛eme takΘ p°idat patiΦkov² prou╛ek skupiny. Provedeme to komponentou TQRBand. Pak nastavφme vlastnost FooterBand komponenty TQRGroup na nov∞ vytvo°en² prou╛ek.
TQRGroup mß vlastnost Master, kterß je automaticky nastavena na hlavnφ komponentu QuickReport. Je zobrazen nad detailnφm prou╛kem v sestav∞. Sprßvn∞ p°ipojen² patiΦkov² prou╛ek skupiny je zobrazen pod detailnφm prou╛kem.
Nejd∙le╛it∞j╣φ vlastnostφ TQRGroup je Expression. Do tΘto vlastnosti zadßme p°φpustn² v²raz QuickReport. Skupina skonΦφ, kdy╛ v²sledek tohoto v²razu se zm∞nφ. P°edpoklßdejme tabulku zßkaznφk∙ s aktivnφm indexem pro sloupce State + Company. HlaviΦku skupiny chceme vypisovat, kdy╛ se zm∞nφ stßt. Jako v²raz pro skupinu pak pouze zadßme State. VyhodnocovaΦ v²razu lokalizuje polo╛ku State a zobrazφ hlaviΦku skupiny p°ed ka╛d²m nov²m stßtem. V p°ipojenΘ patiΦce skupiny (je vypisovßna za v╣emi zßkaznφky stßtu), m∙╛eme uvΘst poΦet zßkaznφk∙ stßtu, celkovou hodnotu jejich objednßvek apod.
Komponenta TQuery pou╛ije nßsledujφcφ dotaz:
select * from customer order by state, company
V²raz pro skupinu je State
Pov╣imn∞te si, ╛a na sestav∞ pou╛ijeme dv∞ komponenty TQRExpr. Prvnφ TQRExpr je umφst∞na na hlaviΦce skupiny a pou╛φvß nßsledujφcφ v²raz.
if(State <> '', State, 'Unknown state')
Ne v╣echny zßkaznφci majφ uveden stßt a v²raz pro n∞ vracφ Unknown state, pro ostatnφ vracφ aktußlnφ stßt.
Komponenta TQRExpr na patiΦce skupiny mß nßsledujφcφ v²raz:
'Customers in ' + State + ' : '  + Str(Count)
Tento v²raz vypisuje poΦet zßkaznφk∙ pro ka╛d² stßt. Vlastnost Master je p°ipojena na komponentu TQuickRep a ResetAfterPrint je nastaveno na true a tak Count je pro ka╛d² stßt vynulovßno.

  1. Nynφ se podφvßme na dal╣φ ji╛ hotov² program. Nalezneme jej v adresß°i Program files\Borland\CBuilder\Examples\DBTask\QuikkRep. Aplikace umo╛≥uje vybφrat r∙znΘ sestavy. Aplikaci si prohlΘdn∞te a vyzkou╣ejte ji.
  2. Dal╣φ program nalezneme v adresß°i Program files\Borland\CBuilder\Examples\DBTask\MastApp. Jednß se o slo╛itou aplikaci pou╛φvajφcφ Quick Report. Aplikaci si prohlΘdn∞te.
23. Vytvß°enφ sestav