Streachable objects
Stretching Objects
Razmotrimo slučaj kada imamo višelinijski tekst različitih duljina. "Text" objekt koji prikazuje informacije iz ovog polja ima fiksnu veličinu. Zato se čini da su neki redovi odrezani. Što se može učiniti u vezi s tim?

Naravno, ili bi se veličina objekta mogla povećati ili bi se veličina fonta mogla smanjiti. Međutim, to može dovesti do rasipanja prostora na izlaznoj stranici jer neki ribe imaju duge opise, dok drugi imaju kratke. FastReport ima neka svojstva koja nam omogućuju da riješimo ovaj problem.
Ova svojstva omogućuju traci ili objektu da automatski prilagode svoju visinu kako bi stvorili potrebni prostor za određeni zapis (redak). Da bismo to postigli, samo trebamo omogućiti svojstvo “Stretch” i traci i “Text” objektu. Međutim, to nije sve, jer bi “Text” objekt s dužim tekstom trebao moći rastegnuti se sam, pa ćemo morati postaviti neka od njegovih drugih svojstava također.
“Text” objekt može automatski postaviti svoju visinu i širinu kako bi napravio prostor za svoj sadržaj. “AutoWidth” i “StretchMode” mogu se koristiti za to. “AutoWidth” omogućuje “Text” objektu da varira svoju širinu tako da svi redovi naprave prostor bez razdvajanja riječi. Ovaj način je koristan kada objekt ima jedan redak teksta i kada rast prema desno neće utjecati na druge objekte. Svojstvo “Stretch” omogućuje da visina objekta raste kako bi se prilagodio tekstu bez promjene širine objekta. "Stretch" ima nekoliko načina koji se mogu odabrati u inspektoru objekta:
smDontStretch – ne rastegnuti objekt (zadano)
smActualHeight – rastegnuti objekt tako da napravi prostor za cijeli tekst
smMaxHeight – rastegnuti objekt tako da njegova donja strana dosegne dno trake u kojoj se nalazi - na ovaj način ćemo se kasnije osvrnuti
Ovdje nas zanima svojstvo “Stretch” objekta “Text”. Omogućite ga koristeći kontekstni izbornik objekta ili postavljanjem "StretchMode" na smActualHeight. Također omogućite svojstvo “Stretch” trake. Pregledajte izvještaj i uvjerite se da je sve sada kako se očekuje.
Da bismo tekst prebacili u novi red, koristimo svojstvo "Word Wrap" koje mora biti omogućeno, što je već zadana vrijednost. Ovo svojstvo je značajno ako je omogućeno svojstvo "AutoWidth".
Kao što možete vidjeti, kada se konstruira izvještaj, FastReport ispunjava objekte podacima i rasteže ih ako je “Stretch” omogućen. Zatim izračunava visinu trake tako da svaki objekt ima dovoljno prostora. Ako je svojstvo “Stretch” trake onemogućeno, ova prilagodba visine se ne izvršava i traka se prikazuje na visini postavljenoj u dizajnu. U ovom slučaju vidjeli bismo da se objekti s dužim tekstom i dalje rastegnu, ali traka ne, što dovodi do preklapanja teksta, budući da se sljedeća traka prikazuje odmah nakon prethodne.
Page Breaks
Kada se izvještaj kreira, FastReport motor ispunjava bijeli prostor stranice trakama. Nakon prikazivanja svake trake trenutna pozicija se pomiče prema dolje. Kada FastReport otkrije da nema dovoljno bijelog prostora za prikaz sljedeće trake (njena visina je veća od preostalog bijelog prostora na stranici), FastReport stvara novu stranicu i nastavlja s prikazom trake odatle. Ova se sekvenca nastavlja onoliko puta koliko ima zapisa u skupu podataka.
Naš izvještaj sadrži objekt s velikim tekstom, zbog čega je visina trake prilično velika. Nadalje, ako velika traka nema dovoljno mjesta na stranici, premješta se na sljedeću ostavljajući puno neiskorištenog prostora na dnu stranice, kao što je ovdje prikazano:

Kako bismo ograničili rasipanje papira, upotrijebimo značajku FastReport koja stvara odlomke iz sadržaja trake. Sve što trebamo učiniti je omogućiti svojstvo “AllowSplit” trake “Prvi nivo podataka”. Vidjet ćete da sada ima manje bijelog prostora na dnu stranica izvještaja:

Kako funkcionira ovo dijeljenje trake? Postoje neki objekti u FastReportu koji podržavaju ovu značajku. To su objekti “Text”, “Line” i “RichEdit”. Oni se mogu “podijeliti”, dok se drugi objekti ne mogu. Kada FastReport treba podijeliti traku, to čini na sljedeći način:
- prikazuje neodvojive objekte koji imaju prostora u bijelom prostoru
- djelomično prikazuje podijeljive objekte (“Text” objekti se prikazuju na način da svi redovi imaju prostora u objektu)
- stvara novu stranicu i nastavlja s prikazom objekata u traci
- ako neodvojivi objekt nema prostora u bijelom prostoru, premješta se na sljedeću stranicu; u isto vrijeme svi objekti smješteni ispod njega se premještaju prema potrebi
- proces se nastavlja dok se svi objekti trake potpuno ne prikažu.
Algoritam dijeljenja bit će jasniji gledajući ovaj primjer:

Treba napomenuti da algoritam dijeljenja nije savršen i konačni izlaz možda neće biti baš onakav kakav se očekuje. Ovu opciju trebate koristiti vrlo pažljivo u slučajevima kada su objekti na podijeljenoj traci grupirani na složen način, i/ili se njihove veličine fonta razlikuju. Evo primjera onoga što bi moglo biti generirano:

Shifting Objects
Pogledajmo različite načine pomicanja. U tu svrhu koristimo svojstvo “ShiftMode”. Pogledajmo 'smWhenOverlapped' način pomicanja. U ovom načinu pomicanje objekta događa se kada se objekt iznad rastegne i preklopi objekt ispod. Evo dva scenarija:
1: tri gornja objekta imaju “Stretch” omogućeno, a tri donja objekta imaju “ShiftMode” postavljeno na 'smAlways'. Donji objekti se pomiču samo dovoljno da omoguće prostor za rastegnuti objekt iznad:

2: tri gornja objekta imaju “Stretch” omogućeno, a tri donja objekta imaju “ShiftMode” postavljeno na 'smWhenOverlapped'. Donji objekti se pomiču kako bi omogućili prostor za rastegnuti objekt i također kako bi održali dizajniranu separaciju između dva objekta:

To omogućuje stvaranje složenih izvještaja, posebno kada bi objekt mogao preklapati nekoliko drugih objekata iznad njega u isto vrijeme. U donjem primjeru svi gornji objekti sadrže rastezljiv tekst, a svi donji su u 'smWhenOverlapped' načinu. Donji objekti će uvijek biti prikazani blizu objekta iznad, bez obzira na duljinu teksta u objektima iznad:
