Objekte të shtrirshme
Objekte që shtrihen
Le të shqyrtojmë një rast kur kemi tekst me shumë rreshta me gjatësi të ndryshme. Objekti "Tekst" që shfaq informacionin nga ky fushë ka një madhësi fikse. Kjo është arsyeja pse disa rreshta duken se janë prerë. Çfarë mund të bëhet për këtë?

Sigurisht, ose madhësia e objektit mund të rritet ose madhësia e tij e shkronjave mund të reduktohet. Megjithatë, kjo mund të çojë në shpenzim të hapësirës në faqen e daljes pasi disa peshq kanë përshkrime të gjata, ndërsa të tjerët kanë të shkurtra. FastReport ka disa pronësi që na lejojnë të zgjidhim këtë problem.
Këto pronësi lejojnë një grup ose një objekt të rregullojë automatikisht lartësinë e tij për të krijuar hapësirën e nevojshme për një rekord të caktuar (rresht). Për ta arritur këtë, ne thjesht duhet të aktivizojmë pronësinë “Stretch” të të dyve, grupit dhe objektit “Tekst”. Megjithatë, kjo nuk është krejt e gjitha, sepse një objekt “Tekst” me tekst më të gjatë duhet të jetë në gjendje të shtrihet vetë, kështu që do të na nevojitet të vendosim disa nga pronësitë e tij të tjera gjithashtu.
Objekti “Tekst” mund të vendosë automatikisht lartësinë dhe gjerësinë e tij për të bërë hapësirë për përmbajtjen e tij. “AutoWidth” dhe “StretchMode” mund të përdoren për këtë. “AutoWidth” lejon objektin “Tekst” të ndryshojë gjerësinë e tij në mënyrë që të gjitha rreshtat të krijojnë hapësirë pa ndarë asnjë fjalë. Ky mod është i dobishëm kur një objekt ka një rresht të vetëm teksti dhe kur rritja në të djathtë nuk do të ndikojë në objektet e tjera. Pronësia “Stretch” lejon lartësinë e objektit të rritet për të akomoduar tekstin pa ndryshuar gjerësinë e objektit. "Stretch" ka disa moda që mund të zgjidhen në inspektorin e objektit:
smDontStretch – mos e shtrij objektin (default)
smActualHeight – shtrij objektin në mënyrë që të krijojë hapësirë për të gjithë tekstin
smMaxHeight – shtrij objektin në mënyrë që fundi i tij të arrijë fundin e grupit në të cilin është vendosur - do ta shqyrtojmë këtë mod më vonë
Këtu na intereson pronësia “Stretch” e objektit “Tekst”. Aktivizojeni atë duke përdorur menunë kontekstuale të objektit ose duke vendosur "StretchMode" në smActualHeight. Aktivizoni gjithashtu pronësinë “Stretch” të grupit. Parashikoni raportin dhe sigurohuni që gjithçka tani është siç pritej.
Për të rrjedhur tekstin në rresht të ri, ne përdorim pronësinë "Word Wrap" që duhet të aktivizohet, e cila është tashmë vlera e paracaktuar. Kjo pronësi është e rëndësishme nëse pronësia "AutoWidth" është e aktivizuar.
Siç mund ta shihni, kur ndërtohet raporti, FastReport mbush objektet me të dhëna dhe i shtrin ato nëse “Stretch” është e aktivizuar. Pastaj llogarit lartësinë e grupit në mënyrë që çdo objekt të ketë mjaft hapësirë. Nëse pronësia “Stretch” e grupit është e çaktivizuar, kjo rregullim lartësie nuk kryhet dhe grupi shfaqet në lartësinë e vendosur në dizajn. Në këtë rast do të shihnim se objektet me tekst më të gjatë do të ishin ende të shtrira, por grupi jo, gjë që çon në mbivendosjen e tekstit, pasi grupi pasues shfaqet menjëherë pas atij të mëparshëm.
Ndërprerjet e Faqes
Kur krijohet një raport, motori FastReport mbush hapësirën e bardhë të faqes me grupe. Pas shfaqjes së çdo grupi, pozita aktuale zhvendoset poshtë. Kur FastReport gjen se nuk ka mjaft hapësirë të bardhë të mbetur për të shfaqur grupin e ardhshëm (lartësia e tij është më e madhe se hapësira e bardhë e mbetur në faqe), FastReport krijon një faqe të re dhe vazhdon me shfaqjen e grupit nga aty. Kjo sekuencë vazhdon për aq herë sa ka rekorde në dataset.
Raporti ynë përmban një objekt me tekst të madh, arsyeja pse lartësia e grupit është mjaft e madhe. Për më tepër, nëse një grup i madh nuk ka mjaft vend në një faqe, ai zhvendoset në të ardhmen duke lënë shumë hapësirë të papërdorur në fund të faqes, siç tregohet këtu:

Për të kufizuar shpenzimin e letrës, le të përdorim një veçori të FastReport që krijon paragrafë nga përmbajtja e një grupi. Gjithçka që na nevojitet është të aktivizojmë pronësinë “AllowSplit” të grupit “Të dhënat e nivelit të parë”. Do të shihni se tani ka më pak hapësirë të bardhë në fund të faqeve të raportit:

Si funksionon ndarja e këtij grupi? Ka disa objekte në FastReport që mbështesin këtë veçori. Ato janë objektet “Tekst”, “Linje” dhe “RichEdit”. Ato mund të “ndarë”, ndërsa objektet e tjera nuk mund. Kur FastReport ka nevojë të ndajë një grup, e bën në mënyrën e mëposhtme:
- shfaq objektet që nuk mund të ndahen dhe që kanë hapësirë në hapësirën e bardhë
- shfaq pjesërisht objektet e ndashme (“Objektet Tekst” shfaqen në një mënyrë që të gjitha rreshtat kanë hapësirë në objekt)
- krijon një faqe të re dhe vazhdon me shfaqjen e objekteve në grup
- nëse një objekt që nuk mund të ndahet nuk ka hapësirë në hapësirën e bardhë, ai zhvendoset në faqen e ardhshme; në të njëjtën kohë, të gjitha objektet që ndodhen poshtë tij zhvendosen sipas nevojës
- procesi vazhdon deri sa të gjitha objektet e grupit të shfaqen plotësisht.
Algoritmi i ndarjes do të bëhet më i qartë duke parë këtë shembull:

Duhet të theksohet se algoritmi i ndarjes nuk është perfekt dhe rezultati përfundimtar mund të mos jetë ashtu siç pritej. Ju duhet ta përdorni këtë opsion me shumë kujdes në rastet kur objektet në grupin e ndarë janë të grumbulluara në një mënyrë të komplikuar, dhe/ose madhësitë e tyre të shkronjave ndryshojnë. Ja një shembull se çfarë mund të gjenerohet:

Zhvendosja e Objekteve
Le të shohim modet e ndryshme të zhvendosjes. Për këtë qëllim ne përdorim pronësinë “ShiftMode”. Le të shohim në 'smWhenOverlapped' modin e zhvendosjes. Në këtë mod, zhvendosja e objektit ndodh kur objekti mbi shtrihet dhe mbivendoset me objektin poshtë. Këtu janë dy skenarë:
1: tre objektet e sipërme kanë “Stretch” të aktivizuar dhe tre objektet e poshtme kanë “ShiftMode” të vendosur në 'smAlways'. Objektet e poshtme zhvendosen vetëm aq sa të lejojnë hapësirë për objektin e shtrirë mbi të:

2: tre objektet e sipërme kanë “Stretch” të aktivizuar dhe tre objektet e poshtme kanë “ShiftMode” të vendosur në 'smWhenOverlapped'. Objektet e poshtme zhvendosen për të lejuar hapësirë për objektin e shtrirë dhe gjithashtu për të ruajtur ndarjen e dizajnuar të dy objekteve:

Kjo lejon krijimin e raporteve të komplikuara, veçanërisht kur një objekt mund të mbivendosë disa objekte të tjera mbi të në të njëjtën kohë. Në shembullin më poshtë, të gjitha objektet e sipërme përmbajnë tekst të shtrirshëm dhe të gjitha ato të poshtme janë në modin 'smWhenOverlapped'. Objektet e poshtme do të shfaqen gjithmonë afër objektit mbi, pavarësisht nga gjatësi e tekstit në objektet e sipërme:
