Lo scheletro del report
Generare un file RTF è un pò come generare un documento HTML, solo che i tag RTF sono molti, ma molti di più. Ho quindi scartato a priori l'idea di scriverlo direttamente nel codice (usando una sfilza di Write("....") insomma). Ci vuole qualcosa di più sofisticato.
Il mio "generatore" sarà quindi costituito da una serie di funzioni, il cui scopo è quello di "incapsulare" la generazione del documento finale in una serie di procedure molto semplici e, soprattutto, riutilizzabili.
Ho bisogno poi dei Tag RTF che mi servono, e dato che sono tanti preferisco averne un elenco e leggerli di volta in volta quando mi servono, in questo modo se voglio aggiungere un tag devo solo aggiungerlo all'elenco, perchè il codice è predisposto per cercarlo nell'elenco e lo troverà.
La funzione "principale" è quella che preleva dall'elenco di tag quello richiesto al momento e lo "spara" nel file che stiamo costruendo.
Il meccanismo quindi si presenta così:
- devo scrivere un tag
- cerco il tag nell'elenco
- scrivo il tag
- ritorno a (1)
Per comodità poi ho pensato che sarebbe utile avere due funzioni di "scrittura" sul file: una che scrive senza andare a capo, e l'altra che invece interrompe la linea e porta il testo a capo (equivalente ad inserire un
<BR>Dopo un pò di elucubrazioni sono arrivato al seguente elenco "minimo" di funzioni da implementare:
- : Inizializza il file e ci scrive dentro i tag di inizializzazione dell'RTF.
IniziaReport() - : Imposta la pagina in Portrait (normale A4 in verticale)
ImpostaPortrait() - Imposta la pagina in Landscape (A4 per il lungo)
ImpostaLandscape() - Aggiunge al file uno "stile" che può essere utilizzato nel testo (Normale, Titolo...)
AggiungiStile() - Imposta i tabulatori da usare nel paragrafo successivo (per le tabulazioni)
ImpostaTabulatori() - : Chiude il paragrafo attuale provocando uno "spazio" tra i testi
ChiudiParagrafo() - Scrive una linea di testo senza andare a capo in fondo
ScriviLinea() - Scrive una linea di testo ed aggiunge la "chiusa" per andare a capo successivamente
ScriviLineaACapo() - : Scrive il testo indicato in grassetto
ScriviGrassetto() - : Scrive il testo indicato in corsivo (anche detto Italico)
ScriviCorsivo() - : Imposta lo stile da usare per il testo successivo
UsaStile() - Cessa di utilizzare lo stile attuale, qualunque esso sia
ChiudiStile() - : "chiude" il documento RTF attuale
ChiudiReport()
Ognuna delle funzioni sopra descritte, ha la stessa struttura:
- Leggo dall'elenco il tag che mi interessa
- Scrivo il tag nel file
- eventualmente: scrivo il testo fornitomi dall'utente a cui il tag si riferisce
- eventualmente: chiudo il tag attuale
Quindi per prima cosa mi serve la funzione che legge dall'elenco il TAG che voglio. Per evitare di complicare le cose ho deciso di non utilizzare un database per memorizzare i tag, troppo complicato e fondamentalmente inutile, i Tag li memorizzo in un file ASCII, avente tale struttura:
Codice del Tag @ testo che compone il tag Il "@" separa il codice dal tag vero e proprio, questo significa che nè il tag, nè il codice possono contenere il carattere "@", in quanto a questo siamo a posto perchè nessun tag RTF contiene il "@".
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 3
- Pagina 4
- Pagina 5
- Pagina 6
- Pagina 7
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Utilità
Stampa
Download 



