It is currently 7 August 2020, 4:11 Advanced search

[BOOK] Dimensione box dinamica e adattamento

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

[BOOK] Dimensione box dinamica e adattamento

Postby batons » 15 January 2020, 16:40

Buonasera,

Sto utilizzando un report per creare un grafico complesso, attualmente imposto la posizione e la dimensione delle box in maniera dinamica nell'evento After Formatting, basandomi sulla dimensione della pagina mastro e sulla dimensione di altre box. Se l'adattamento della pagina mastro è impostato su "Nessuno" il grafico viene visualizzato correttamente e la dimensione e posizione delle box sono corretti. Vorrei rendere questo report adattabile alla pagina, in maniera da occupare tutto lo spazio dello schermo a disposizione. Impostando l'adattamento della pagina mastro su "Adatta pagina" le box di cui imposto la dimensione e posizione non si adattano e il loro posizionamento e la loro dimensione non sono corretti. After Formatting è l'evento corretto da utilizzare per impostare dimensione e posizione delle box? Per calcolare la giusta dimensione delle box avrei bisogno di sapere la dimensione a runtime della pagina mastro e delle box post-adattamento, oppure le box si dovrebbero adattare anche dopo avergli impostato una dimensione nell'evento After Formatting.

Grazie
batons
 
Posts: 17
Joined: 11 February 2019, 8:10

Re: [BOOK] Dimensione box dinamica e adattamento

Postby theguru » 22 January 2020, 18:11

OK, non so se riuscirò a rispondere in maniera coerente alla tua domanda, ma se avessi avuto le informazioni che seguono qualche anno fa mi sarei risparmiato ore ed ore di test correzioni smadonnamenti e malditesta vari.
Premesse:
- parliamo in generale di larghezza, perché più naturale, ma il sistema si adatta anche alle altezze
- nei pannelli, puoi identificare il frame che li contiene, oppure il campo statico, come ridimensionabile: in seguito a ciò, puoi identificare una serie di campi come ridimensionabili o riposizionabili: a quel punto è tutto automatico, ed il framework adatta in maniera corretta le larghezze dei frame e di tutti i campi all'interno, oltre alla loro posizione.
- con i book dovrebbe essere lo stesso, definendo:
  • la mastro che contiene il tutto, con il parametro fit impostato a fit_page o adjust_width
  • la box del mastro, in cui è inserita la sezione, con horizontal_resizing impostato a fit
  • le box, all'interno della sezione, con i parametri horizontal_resizing impostati a fit o move, con la stessa logica dei pannelli
- tutto chiaro? bene, non funziona, ovvero funziona male, provato in lungo ed in largo: le box vengono disegnate con delle notevoli imprecisioni, si sovrappongono di alcuni mm, a volte dovrebbero traslare e non lo fanno, insomma un macello. Ma come molto spesso accade, con INDE riesci a fare manualmente quello che lui fallisce a fare in automatico, una delle caratteristiche che più apprezzo di questo prodotto.

Quindi, metodo (vado a memoria):
  • crei una variabile globale, di tipo float, che chiameremo reference_width
  • nell'on_formatting della mastro, inizializzi tale variabile con la proprietà .width del mastro (reference_width=BOOK.name_of_the_MASTRO.width)
  • in questo modo ottieni il valore a design time della box che contiene tutta la tua grafica
  • nella sezione che contiene gli elementi che vuoi ridimensionare, inserisci una box (anche trasparente, chiamiamola box_base) che copre completamente lo spazio messo a disposizione dal mastro, con le proprietà horizontal_resizing ed eventualmente vertical_resizing impostate a fit
  • all'interno di questa sezione, definisci tutte le box che compongono il layout con le proprietà di resizing uguale a no_action
  • nel before_formatting di tale sezione, definisci una variabile delta, sempre float, in questo modo: delta = BOOK.box_base.width - reference_width, in questo modo hai ottenuto un valore in millimetri, eventualmente negativo, che rappresenta quanto la tua struttura grafica si è allargata automaticamente
  • a questo punto usi un po' di aritmetica per ottenere quello che ti serve, impostando i parametri .width e .left delle varie box che compongono il tuo layout (eventualmente, come detto, anche .height e .top), ad esempio puoi aggiungere delta/2 alla .width di 2 box affiancare, ed al .left della seconda, funziona :)

Nota: per quando tutto ciò sembri complesso, alla fine ci prendi la mano e funziona bene.
L'unica cosa che chiederei a Progamma, che non credo sia un grande lavoro, è quello di avere dei metodi di box chiamati (es.) .addWidth e .addHeight, che prendano come parametro un float, e che lo aggiungano (o sottraggano se negativo): in questo modo riuscirei a snellire il codice, adesso devo fare una cosa tipo:
nomeBook.nomeReport.nomeBox.width = nomeBook.nomeReport.nomeBox.width + delta
in effetti scomodo.
User avatar
theguru
 
Posts: 790
Joined: 29 January 2014, 13:01

Re: [BOOK] Dimensione box dinamica e adattamento

Postby batons » 6 February 2020, 16:41

Grazie per la risposta molto dettagliata ed esaustiva, sono riuscito a risolvere il problema seguendo il tuo metodo. Per recuperare la larghezza a runtime, invece di utilizzare una box "dummy", mi sono basato direttamente sulla box della pagina mastro.

Grazie!
batons
 
Posts: 17
Joined: 11 February 2019, 8:10


Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: No registered users and 13 guests

cron