Scopo
La proprietà FitMode indica al sistema se e come le pagine del book devono adattarsi alle dimensioni della porzione di videata in cui il book è stato inserito in fase di design-time.
Tale proprietà viene utilizzata solo nel caso di applicazioni web e nel caso di book mostrati in anteprima in porzioni di videate web.
Durante la procedura di stampa di un book, il sistema crea copie delle pagine Template e se il valore della proprietà FitMode è diverso da NONE ricalcola le dimensioni della pagina in funzione delle dimensioni dello spazio riservato al book durante la fase di design-time. E' possibile indicare in qualunque momento le nuove dimensioni dello spazio riservato al book mediante il metodo SetSize dello stesso.
Se il valore della proprietà FitMode delle pagine è diverso da NONE il sistema, dopo aver creato la copia della pagina, ne ricalcola le dimensioni per adattarle allo spazio riservato al book. In particolare se il valore della proprietà FitMode è FITWIDTH il sistema imposta la larghezza della pagina alla larghezza dello spazio riservato al book; se il valore della proprietà FitMode è FITPAGE il sistema ricalcola sia la larghezza che l'altezza della pagina garantendo che la pagina stessa sia interamente contenuta nello spazio riservato al book.
Sintassi
//
fm := TemplatePage.FitMode
Quando letta
Restituisce uno dei valori contenuti nella lista valori Fit Modes e indica se e come la pagina deve adattarsi allo spazio riservato al book.
Quando impostata
Comunica al sistema se e come la pagina deve adattarsi allo spazio riservato al book durante la fase di stampa dello stesso.
Esempio di codice
// Fired after changes in panel are saved to database
// **************************************************
event ImpiegatiBook.ConfigBook.AfterCommit(
int RowsUpdated // Number of rows inserted or updated
int RowsInErrors // Number of rows that cannot be updated due to databas...
)
{
int OldFitMode = 0 // Valore precedente della proprietà Fit_Mode
//
// Memorizzo il vecchio valore del Fit_Mode e aggiorno il valore della
// proprietà
OldFitMode := ImpiegatiBook.ImpiegatiBookPage.FitMode
ImpiegatiBook.ImpiegatiBookPage.FitMode := ConfigBook.FitMode
//
// Comunico al sistema le nuove dimensioni del book
ImpiegatiBook.SetSize(ConfigBook.Width, ConfigBook.Height)
//
// Ci sono 2 casi in cui la Set_Size non aggiorna automaticamente il book:
// 1) la proprietà Fit_Mode era NONE e tutte le pagine in memoria avevano
// tale valore. In quel caso la Set_Size non aggiorna il book e devo
// farlo io.
// 2) non sono state modificate le dimensioni. In questo caso la Set_Size
// non fa nulla e devo pensarci io a ristampare il book
if (OldFitMode <> ConfigBook.FitMode AND OldFitMode = None) OR NOT(
ConfigBook.ModifDims)
{
// Devo aggiornare tutte le pagine già stampate del book
ImpiegatiBook.Refresh(ONE, C-1)
//
// Ripristino il flag che indica se le dimensioni sono state modificate
// (vedi evento di OnUpdatingRow)
ConfigBook.ModifDims := False
}
}
- Normalmente la proprietà FitPage viene definita a design-time o modificata a run-time fuori dall'evento di OnFormatting della pagina.
- Il sistema gestisce la proprietà FitMode prima di notificare l'evento di OnFormatting. Quindi all'interno dell'evento è possibile conoscere il valore delle dimensioni della pagina calcolate dal sistema dopo aver gestito la proprietà FitMode.
- La modifica della proprietà FitMode all'interno degli eventi di validazione non ha effetto sul calcolo delle dimensioni della pagina. Occorre tener presente, però, che dopo la notifica dell'evento OnFormatting della pagina il sistema contolla se le dimensioni della pagina sono state modificate durante l'evento stesso. Qualora lo siano e la proprietà FitMode sia diversa da NONE il sistema ricalcola anche le dimensioni delle box contenute nella pagina utilizzando il valore delle proprietà HorizontalResizeMode e VerticalResizeMode delle box. In particolare se la proprietà FitMode è uguale a FITWIDTH e la larghezza della pagina è stata modificata all'interno dell'evento OnFormatting il sistema modifica e/o sposta le box che hanno la proprietà HorizontalResizeMode diversa da None cercando di compensare per la variazione della larghezza della pagina. Lo stesso accade se la proprietà FitMode è uguale a FITPAGE. In quest'ultimo caso il sistema tenterà di distribuire sia la variazione della larghezza che quella dell'altezza tra le box della pagina utilizzando entrambi i valori delle proprietà HorizontalResizeMode e VerticalResizeMode delle box. Quindi se la pagina è stata disegnata con la proprietà FitMode uguale a NONE ma all'interno dell'evento OnFormatting viene, per esempio, modificata la larghezza della pagina è possibile impostare la proprietà FitMode a FITWIDTH per far sì che il sistema modifichi automaticamente le coordinate e dimensioni delle box così come definito a design-time. Allo stesso modo è possibile modificare entrambe le dimensioni della pagina e impostare la proprietà FitMode a FITPAGE per adattare automaticamente tutte le box che lo prevedono.
- Attenzione: Se la proprietà FitMode viene modificata all'interno dell'evento OnFormatting della pagina la modifica ha effetto solo sulla pagina in fase di formattazione (consulta il video tutorial Mastro On Formatting). Se la proprietà FitMode viene modificata al di fuori dell'evento OnFormatting della pagina, da quel momento in poi tutte le copie della pagina avranno la proprietà FitMode valorizzata allo stesso modo. In quest'ultimo caso è come se alla proprietà FitMode fosse stato fornito tale valore a design-time.
- Se la proprietà FitMode viene modificata all'interno di una procedura legata ad una box contenuta nella pagina tale modifica ha effetto solo sulla pagina che contiene la box cliccata. Tale modifica equivale ad una modifica alla proprietà fatta all'interno dell'evento OnFormatting della pagina che contiene la box.
- Se viene modificata la proprietà FitMode durante l'evento OnFormatting non è necessario ristampare il book. Tale modifica avrà effetto immediato. Qualora, invece, la modifica sia fatta fuori dall'evento OnFormatting e non all'interno della procedura collegata ad una box contenuta nella pagina potrebbe essere necessario ristampare il book utilizzando la procedura Refresh dello stesso.
Ultima modifica: 02/11/2022 / Validità: da 6.7.2900