Streachable objekti
Produžavanje objekata
Razmotrimo slučaj kada imamo višelinijski tekst različitih dužina. "Tekst" objekat koji prikazuje informacije iz ovog polja ima fiksnu veličinu. Zato se čini da su neki redovi odsečeni. Šta se može učiniti povodom ovoga?

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 bendu 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 bendu i "Tekst" objektu. Međutim, to nije sve, jer "Tekst" objekat sa dužim tekstom treba da može da se proteže sam, pa ćemo morati da postavimo neka od njegovih drugih svojstava takođe.
"Tekst" objekat može automatski postaviti svoju visinu i širinu kako bi napravio prostor za svoj sadržaj. "AutoWidth" i "StretchMode" se mogu koristiti za ovo. "AutoWidth" omogućava "Tekst" objektu da varira 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 proteži objekat (podrazumevano)
smActualHeight – proteži objekat tako da napravi prostor za ceo tekst
smMaxHeight – proteži objekat tako da njegova donja ivica dosegne dno benda u kojem se nalazi - na ovaj režim ćemo se osvrnuti kasnije
Ovdje nas zanima "Stretch" svojstvo "Tekst" objekta. Omogućite ga koristeći kontekstni meni objekta ili postavljanjem "StretchMode" na smActualHeight. Takođe omogućite "Stretch" svojstvo benda. 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 proteže ih ako je "Stretch" omogućeno. Zatim izračunava visinu benda tako da svaki objekat ima dovoljno prostora. Ako je "Stretch" svojstvo benda onemogućeno, ova prilagodba visine se ne vrši i bend se prikazuje na visini postavljenoj u dizajnu. U ovom slučaju bismo videli da se objekti sa dužim tekstom i dalje protežu, ali bend ne bi, što dovodi do preklapanja teksta, pošto se sledeći bend prikazuje odmah nakon prethodnog.
Prelomi stranica
Kada se izveštaj kreira, FastReport motor popunjava beli prostor stranice sa bendovima. Nakon prikazivanja svakog benda, trenutna pozicija se pomera naniže. Kada FastReport otkrije da nema dovoljno belog prostora da prikaže sledeći bend (njegova visina je veća od preostalog belog prostora na stranici), FastReport kreira novu stranicu i nastavlja sa prikazom benda odatle. Ova sekvenca se nastavlja onoliko puta koliko ima zapisa u skupu podataka.
Nas izveštaj sadrži objekat sa velikim tekstom, zbog čega je visina benda prilično velika. Štaviše, ako veliki bend 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 FastReport funkciju koja pravi paragrafe iz sadržaja benda. Sve što treba da uradimo je da omogućimo "AllowSplit" svojstvo benda "Podaci prvog nivoa". Videćete da sada ima manje belog prostora na dnu stranica izveštaja:

Kako funkcioniše ovo deljenje benda? Postoje neki objekti u FastReport-u koji podržavaju ovu funkciju. To su "Tekst", "Linija" i "RichEdit" objekti. Oni se mogu "podeliti", dok drugi objekti ne mogu. Kada FastReport treba da podeli bend, to čini na sledeći način:
- prikazuje neodeljive objekte koji imaju prostora u belom prostoru
- delimično prikazuje deljive objekte ("Tekst" objekti se prikazuju na način da svi redovi imaju prostora u objektu)
- kreira novu stranicu i nastavlja sa prikazom objekata u bendu
- 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 benda 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 podeljenom bendu 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 proteže i preklapa 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 protegnuti 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 protegnuti objekat i takođe da održe dizajniranu separaciju između dva objekta:

Ovo 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 rastezljiv 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:
