Obiecte extensibile
Obiecte de întindere
Să considerăm un caz în care avem text pe mai multe linii de lungimi variate. Obiectul "Text" care afișează informațiile din acest câmp are o dimensiune fixă. De aceea, unele linii par a fi tăiate. Ce se poate face în legătură cu asta?

Desigur, fie dimensiunea obiectului ar putea fi crescută, fie dimensiunea fontului ar putea fi redusă. Cu toate acestea, acest lucru poate duce la risipirea spațiului pe pagina de ieșire, deoarece unele pești au descrieri lungi, în timp ce altele au descrieri scurte. FastReport are câteva proprietăți care ne permit să rezolvăm această problemă.
Aceste proprietăți permit unui band sau unui obiect să își ajusteze automat înălțimea pentru a crea spațiul necesar pentru un anumit record (rând). Pentru a realiza acest lucru, trebuie doar să activăm proprietatea “Stretch” atât a band-ului, cât și a obiectului “Text”. Cu toate acestea, nu este totul, deoarece un obiect “Text” cu text mai lung ar trebui să fie capabil să se întindă singur, așa că va trebui să setăm și unele dintre celelalte proprietăți ale sale.
Obiectul “Text” poate seta automat înălțimea și lățimea sa pentru a face loc pentru conținutul său. “AutoWidth” și “StretchMode” pot fi folosite pentru aceasta. “AutoWidth” permite obiectului “Text” să varieze lățimea astfel încât toate liniile să facă loc fără a despărți cuvintele. Acest mod este util atunci când un obiect are o singură linie de text și când creșterea spre dreapta nu va afecta alte obiecte. Proprietatea “Stretch” permite înălțimii obiectului să crească pentru a acomoda textul fără a schimba lățimea obiectului. "Stretch" are mai multe moduri care pot fi selectate în inspectorul de obiecte:
smDontStretch – nu întinde obiectul (implicit)
smActualHeight – întinde obiectul astfel încât să facă loc pentru întregul text
smMaxHeight – întinde obiectul astfel încât partea de jos să ajungă la partea de jos a band-ului în care este plasat - vom analiza acest mod mai târziu
Aici suntem interesați de proprietatea “Stretch” a obiectului “Text”. Activează-o folosind meniul contextual al obiectului sau setând "StretchMode" la smActualHeight. De asemenea, activează proprietatea “Stretch” a band-ului. Previziunea raportului și asigură-te că totul este acum așa cum te aștepți.
Pentru a curge textul într-o nouă linie, folosim proprietatea "Word Wrap" care trebuie activată, ceea ce este deja valoarea implicită. Această proprietate este semnificativă dacă proprietatea "AutoWidth" este activată.
După cum poți vedea, atunci când construiește raportul, FastReport umple obiectele cu date și le întinde dacă “Stretch” este activat. Apoi calculează înălțimea band-ului astfel încât fiecare obiect să aibă suficient loc. Dacă proprietatea “Stretch” a band-ului este dezactivată, această ajustare a înălțimii nu este efectuată și band-ul este afișat la înălțimea setată în design. În acest caz, am vedea că obiectele cu text mai lung ar fi totuși întinse, dar band-ul nu, ceea ce duce la suprapunerea textului, deoarece band-ul următor este afișat imediat după cel anterior.
Împărțiri de pagină
Când un raport este creat, motorul FastReport umple spațiul alb al paginii cu band-uri. După afișarea fiecărui band, poziția curentă se mută în jos. Când FastReport constată că nu mai este suficient spațiu alb rămas pentru a afișa următorul band (înălțimea sa este mai mare decât spațiul alb rămas pe pagină), FastReport creează o pagină nouă și continuă cu afișarea band-ului de acolo. Această secvență continuă de câte ori sunt înregistrări în setul de date.
Raportul nostru conține un obiect cu text mare, motiv pentru care înălțimea band-ului este destul de mare. În plus, dacă un band mare nu are suficient loc pe o pagină, este mutat pe pagina următoare lăsând mult spațiu nefolosit în partea de jos a paginii, așa cum este arătat aici:

Pentru a limita risipa de hârtie, să folosim o caracteristică FastReport care face paragrafe din conținutul unui band. Tot ce trebuie să facem este să activăm proprietatea “AllowSplit” a band-ului “First level data”. Vei vedea că acum există mai puțin spațiu alb în partea de jos a paginilor raportului:

Cum funcționează această împărțire a band-ului? Există câteva obiecte în FastReport care suportă această caracteristică. Acestea sunt obiectele “Text”, “Line” și “RichEdit”. Ele pot fi “împărțite”, în timp ce alte obiecte nu pot. Când FastReport trebuie să împartă un band, o face în următorul mod:
- afișează obiectele care nu pot fi împărțite și care au loc în spațiul alb
- afișează parțial obiectele care pot fi împărțite (obiectele “Text” sunt afișate astfel încât toate liniile au spațiu în obiect)
- creează o pagină nouă și continuă cu afișarea obiectelor în band
- dacă un obiect care nu poate fi împărțit nu are loc în spațiul alb, este mutat pe pagina următoare; în același timp, toate obiectele situate dedesubt sunt mutate după cum este necesar
- procesul continuă până când toate obiectele band-ului sunt afișate complet.
Algoritmul de împărțire va deveni mai clar prin examinarea acestui exemplu:

Trebuie menționat că algoritmul de împărțire nu este perfect și ieșirea finală poate să nu fie chiar așa cum te aștepți. Ar trebui să folosești această opțiune cu foarte multă atenție în cazurile în care obiectele de pe band-ul împărțit sunt grupate într-un mod complicat și/sau dimensiunile fonturilor lor diferă. Iată un exemplu de ceea ce ar putea fi generat:

Mutarea obiectelor
Să ne uităm la diferitele moduri de mutare. În acest scop, folosim proprietatea “ShiftMode”. Să ne uităm la 'smWhenOverlapped' modul de mutare. În acest mod, mutarea obiectului are loc atunci când obiectul de deasupra se întinde și suprapune obiectul de dedesubt. Iată două scenarii:
1: cele trei obiecte de sus au “Stretch” activat și cele trei obiecte de jos au “ShiftMode” setat la 'smAlways'. Obiectele de jos se mută doar suficient pentru a permite spațiu pentru obiectul întins de deasupra:

2: cele trei obiecte de sus au “Stretch” activat și cele trei obiecte de jos au “ShiftMode” setat la 'smWhenOverlapped'. Obiectele de jos se mută pentru a permite spațiu pentru obiectul întins și, de asemenea, pentru a menține separarea proiectată a celor două obiecte:

Aceasta permite crearea de rapoarte complicate, în special acolo unde un obiect ar putea suprapune mai multe alte obiecte deasupra sa în același timp. În exemplul de mai jos, toate obiectele superioare conțin text extensibil și toate cele inferioare sunt în modul 'smWhenOverlapped'. Obiectele inferioare vor fi întotdeauna afișate aproape de obiectul de deasupra, indiferent de lungimea textului din obiectele de deasupra:
