Streachable objekti
Stretching objekti
Razmotrimo slučaj kada imamo višelinijski tekst različite dužine. "Text" objekat koji prikazuje informacije iz ovog polja ima fiksnu veličinu. Zato se čini da su neki redovi isečeni. Šta se može učiniti povodom toga?

Naravno, ili bi veličina objekta mogla biti povećana ili bi veličina fonta mogla biti smanjena. 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ćavaju da rešimo ovaj problem.
Ova svojstva omogućavaju traci ili objektu da automatski prilagode svoju visinu kako bi stvorili neophodan prostor za dati zapis (red). Da bismo to postigli, samo treba da omogućimo "Stretch" svojstvo i trake i "Text" objekta. Međutim, to nije sve, jer "Text" objekat sa dužim tekstom treba da može da se rasteže sam, pa ćemo morati da postavimo neka od njegovih drugih svojstava takođe.
"Text" objekat može automatski postaviti svoju visinu i širinu kako bi napravio prostor za svoj sadržaj. "AutoWidth" i "StretchMode" mogu se koristiti za ovo. "AutoWidth" omogućava "Text" objektu da menja svoju širinu tako da svi redovi naprave prostor bez deljenja reči. Ovaj režim je koristan kada objekat ima jedan red teksta i kada rast udesno neće uticati na druge objekte. "Stretch" svojstvo omogućava visini objekta da raste kako bi se prilagodio tekstu bez promene širine objekta. "Stretch" ima nekoliko režima koji se mogu odabrati u inspektoru objekta:
smDontStretch – ne rastegati objekat (podrazumevano)
smActualHeight – rastegnuti objekat tako da napravi prostor za ceo tekst
smMaxHeight – rastegnuti objekat tako da njegova donja ivica dostigne dno trake u kojoj se nalazi - o ovom režimu ćemo govoriti kasnije
Ovde nas zanima "Stretch" svojstvo "Text" objekta. Omogućite ga koristeći kontekstni meni objekta ili postavljanjem "StretchMode" na smActualHeight. Takođe omogućite "Stretch" svojstvo trake. Pregledajte izveštaj i uverite se da je sve sada kako se očekuje.
Da bismo prebacili tekst u novi red, koristimo svojstvo "Word Wrap" koje mora biti omogućeno, što je već podrazumevana vrednost. Ovo svojstvo je značajno ako je omogućeno svojstvo "AutoWidth".
Kao što možete videti, kada se konstruira izveštaj, FastReport popunjava objekte podacima i rasteže ih ako je "Stretch" omogućeno. Zatim izračunava visinu trake tako da svaki objekat ima dovoljno prostora. Ako je "Stretch" svojstvo trake onemogućeno, ova prilagodba visine se ne vrši i traka se prikazuje na visini postavljenoj u dizajnu. U ovom slučaju bismo videli da se objekti sa dužim tekstom i dalje rastežu, ali traka ne, što dovodi do preklapanja teksta, pošto se sledeća traka prikazuje odmah nakon prethodne.
Prelomi stranica
Kada se izveštaj kreira, FastReport motor popunjava beli prostor stranice trakama. Nakon prikazivanja svake trake, trenutna pozicija se pomera naniže. Kada FastReport otkrije da nema dovoljno belog prostora da prikaže sledeću traku (njena visina je veća od preostalog belog prostora na stranici), FastReport kreira novu stranicu i nastavlja sa prikazom trake odatle. Ova sekvenca se nastavlja onoliko puta koliko ima zapisa u skupu podataka.
Naš izveštaj sadrži objekat sa velikim tekstom, zbog čega je visina trake prilično velika. Štaviše, ako velika traka nema dovoljno mesta na stranici, pomera se na sledeću ostavljajući mnogo neiskorišćenog prostora na dnu stranice, kao što je ovde prikazano:

Da bismo ograničili rasipanje papira, hajde da koristimo funkciju FastReport-a koja pravi paragrafe iz sadržaja trake. Sve što treba da uradimo je da omogućimo "AllowSplit" svojstvo trake "Prvi nivo podataka". Videćete da sada ima manje belog prostora na dnu stranica izveštaja:

Kako funkcioniše ovo deljenje trake? Postoje neki objekti u FastReport-u koji podržavaju ovu funkciju. To su "Text", "Line" i "RichEdit" objekti. Oni mogu biti "podeljeni", dok drugi objekti ne mogu. Kada FastReport treba da podeli traku, to čini na sledeći način:
- prikazuje neodeljive objekte koji imaju prostora u belom prostoru
- delimično prikazuje deljive objekte ("Text" objekti se prikazuju na način da svi redovi imaju prostora u objektu)
- kreira novu stranicu i nastavlja sa prikazom objekata u traci
- ako neodeljivi objekat nema prostora u belom prostoru, pomera se na sledeću stranicu; u isto vreme svi objekti koji se nalaze ispod njega se pomeraju kako je potrebno
- proces se nastavlja dok se svi objekti trake potpuno ne prikažu.
Algoritam deljenja će postati jasniji gledajući ovaj primer:

Treba napomenuti da algoritam deljenja nije savršen i konačni izlaz možda neće biti baš onakav kakav se očekuje. Trebalo bi da koristite ovu opciju vrlo pažljivo u slučajevima kada su objekti na podeljenoj traci grupisani na komplikovan način, i/ili se njihove veličine fonta razlikuju. Evo primera onoga što bi moglo biti generisano:

Pomera objekti
Pogledajmo različite režime pomeranja. U tu svrhu koristimo "ShiftMode" svojstvo. Pogledajmo 'smWhenOverlapped' režim pomeranja. U ovom režimu pomeranje objekta se dešava kada se objekat iznad rastegne i preklopi objekat ispod. Evo dva scenarija:
1: tri gornja objekta imaju "Stretch" omogućeno i tri donja objekta imaju "ShiftMode" postavljeno na 'smAlways'. Donji objekti se pomeraju samo dovoljno da omoguće prostor za rastegnuti objekat iznad:

2: tri gornja objekta imaju "Stretch" omogućeno i tri donja objekta imaju "ShiftMode" postavljeno na 'smWhenOverlapped'. Donji objekti se pomeraju da omoguće prostor za rastegnuti objekat i takođe da održe dizajniranu separaciju između dva objekta:

To omogućava kreiranje komplikovanih izveštaja, posebno kada objekat može preklapati nekoliko drugih objekata iznad njega u isto vreme. U primeru ispod svi gornji objekti sadrže rastegljivi tekst, a svi donji su u 'smWhenOverlapped' režimu. Donji objekti će uvek biti prikazani blizu objekta iznad, bez obzira na dužinu teksta u objektima iznad:
