Raztegljivi objekti
Raztegovanje objektov
Razmislimo o primeru, ko imamo večvrstični besedilo različne dolžine. Objekt "Besedilo", ki prikazuje informacije iz tega polja, ima fiksno velikost. Zato se zdi, da so nekatere vrstice odrezane. Kaj lahko storimo glede tega?

Seveda, bodisi bi lahko povečali velikost objekta ali zmanjšali njegovo velikost pisave. Vendar pa to lahko privede do zapravljanja prostora na izhodni strani, saj imajo nekatere ribe dolge opise, medtem ko imajo druge kratke. FastReport ima nekatere lastnosti, ki nam omogočajo, da rešimo ta problem.
Te lastnosti omogočajo pasu ali objektu, da samodejno prilagodi svojo višino, da ustvari potrebno prostor za določen zapis (vrstico). Da bi to dosegli, moramo samo omogočiti lastnost "Raztegniti" tako pasu kot tudi objektu "Besedilo". Vendar to še ni vse, ker bi moral objekt "Besedilo" z daljšim besedilom biti sposoben raztegniti se sam, zato bomo morali nastaviti tudi nekatere njegove druge lastnosti.
Objekt "Besedilo" lahko samodejno nastavi svojo višino in širino, da ustvari prostor za svoje vsebine. "AutoWidth" in "StretchMode" se lahko uporabita za to. "AutoWidth" omogoča objektu "Besedilo", da spreminja svojo širino, tako da vse vrstice ustvarijo prostor, ne da bi razdelile katero koli besedo. Ta način je koristen, ko ima objekt eno samo vrstico besedila in ko rast na desno ne bo vplivala na druge objekte. Lastnost "Raztegniti" omogoča, da višina objekta raste, da sprejme besedilo, ne da bi spremenila širino objekta. "Raztegniti" ima več načinov, ki jih lahko izberemo v inšpektorju objekta:
smDontStretch – ne raztegniti objekta (privzeto)
smActualHeight – raztegniti objekt, da ustvari prostor za celotno besedilo
smMaxHeight – raztegniti objekt, tako da njegova dno doseže dno pasu, v katerem je postavljen - ta način bomo podrobneje obravnavali kasneje
Tukaj nas zanima lastnost "Raztegniti" objekta "Besedilo". Omogočite jo z uporabo kontekstnega menija objekta ali tako, da nastavite "StretchMode" na smActualHeight. Prav tako omogočite lastnost "Raztegniti" pasu. Predogledajte poročilo in se prepričajte, da je vse zdaj tako, kot je pričakovano.
Za prelivanje besedila v novo vrstico uporabimo lastnost "Word Wrap", ki mora biti omogočena, kar je že privzeta vrednost. Ta lastnost je smiselna, če je omogočena lastnost "AutoWidth".
Kot lahko vidite, ko FastReport gradi poročilo, napolni objekte s podatki in jih raztegne, če je "Raztegniti" omogočeno. Nato izračuna višino pasu, tako da ima vsak objekt dovolj prostora. Če je lastnost "Raztegniti" pasu onemogočena, ta prilagoditev višine ni izvedena in pas se prikaže na višini, nastavljeni v oblikovanju. V tem primeru bi videli, da bi se objekti z daljšim besedilom še vedno raztegnili, vendar pas ne, kar vodi do prekrivanja besedila, saj se naslednji pas prikaže takoj po prejšnjem.
Prelomi strani
Ko je poročilo ustvarjeno, motor FastReport napolni belo mesto strani s pasovi. Po prikazu vsakega pasu se trenutna pozicija premakne navzdol. Ko FastReport ugotovi, da na strani ni dovolj belega prostora za prikaz naslednjega pasu (njegova višina je večja od belega prostora, ki je ostal na strani), FastReport ustvari novo stran in nadaljuje s prikazom pasu od tam. Ta zaporedje se nadaljuje toliko krat, kolikor je zapisov v naboru podatkov.
Naše poročilo vsebuje objekt z velikim besedilom, zato je višina pasu precej velika. Poleg tega, če velik pas nima dovolj prostora na strani, se premakne na naslednjo, pri čemer na dnu strani ostane veliko neizkoriščenega prostora, kot je prikazano tukaj:

Da bi omejili zapravljanje papirja, uporabimo funkcijo FastReport, ki ustvari odstavke iz vsebine pasu. Vse, kar moramo storiti, je omogočiti lastnost "AllowSplit" pasu "Podatki prve ravni". Videli boste, da je zdaj manj belega prostora na dnu strani poročila:

Kako deluje to deljenje pasov? V FastReport obstajajo nekateri objekti, ki podpirajo to funkcijo. To so objekti "Besedilo", "Črta" in "RichEdit". Ti se lahko "razdelijo", medtem ko drugi objekti ne morejo. Ko FastReport potrebuje razdeliti pas, to stori na naslednji način:
- prikaže neoddeljive objekte, ki imajo prostor v belem prostoru
- delno prikaže deljive objekte (objekti "Besedilo" so prikazani tako, da imajo vse vrstice prostor v objektu)
- ustvari novo stran in nadaljuje s prikazom objektov v pasu
- če neoddeljiv objekt nima prostora v belem prostoru, se premakne na naslednjo stran; hkrati se vsi objekti, ki se nahajajo pod njim, premaknejo, kot je potrebno
- postopek se nadaljuje, dokler niso vsi objekti pasu popolnoma prikazani.
Algoritem deljenja bo bolj jasen, če si ogledamo ta primer:

Treba je opozoriti, da algoritem deljenja ni popoln in končni izhod morda ne bo povsem tak, kot je pričakovano. To možnost bi morali uporabljati zelo previdno v primerih, ko so objekti na razdeljenem pasu zapleteni in/ali se njihove velikosti pisave razlikujejo. Tukaj je primer, kaj bi lahko bilo generirano:

Premikanje objektov
Poglejmo različne načine premikanja. Za ta namen uporabimo lastnost "ShiftMode". Poglejmo 'smWhenOverlapped' način premikanja. V tem načinu se premikanje objekta zgodi, ko se objekt zgoraj raztegne in prekriva objekt spodaj. Tukaj sta dva scenarija:
1: trije zgornji objekti imajo omogočeno "Raztegniti" in trije spodnji objekti imajo "ShiftMode" nastavljeno na 'smAlways'. Spodnji objekti se premaknejo le toliko, da omogočijo prostor za raztegnjeni objekt nad njim:

2: trije zgornji objekti imajo omogočeno "Raztegniti" in trije spodnji objekti imajo "ShiftMode" nastavljeno na 'smWhenOverlapped'. Spodnji objekti se premaknejo, da omogočijo prostor za raztegnjeni objekt in tudi, da ohranijo načrtovano ločitev dveh objektov:

To omogoča ustvarjanje zapletenih poročil, zlasti tam, kjer bi lahko objekt prekrival več drugih objektov nad njim hkrati. V spodnjem primeru vsi zgornji objekti vsebujejo raztegljivo besedilo in vsi spodnji so v načinu 'smWhenOverlapped'. Spodnji objekti bodo vedno prikazani blizu objekta zgoraj, ne glede na dolžino besedila v objektih zgoraj:
