Anche se la classe che ne faccia uso sia sempre la PdfWriter.Repo03pdf, l'argomento riguarda la necessità di creare una classe con
object statico al fine di permettere il caricamento dei dati in esso contenuti. Spero di riuscire a spiegarmi:
Nel programma devo gestire l'eventualità che il riepilogo di una data giornata contabile venga richiesto, per la stampa, da due form diverse:
- Fmain, attraverso la barra dei menù
- Frm3, cioè la Form di quadratura e chiusura di una giornata contabile.
Entrambe le Form richiamano la Form di anteprima-stampa con:
FrmPrint01 = NEW FormPrint01($FrmParam, $TabResta, fSaldoIni, fSaldoFin, $TipoValuta)
La FormPrint01 a sua volta richiama PdfWriter per procedere alla stampa:
pdf = NEW Repo03pdf("Portrait", "mm", "A5")
Dovendo, a questo punto, PdfWriter.Repo03pdf estrarre i dati dalla griglia costruita in FormPrint01, ho incontrato qualche difficoltà ad indirizzare la FormPrint01.grigldview, perchè il percorso di indirizzamento cambia a seconda da quale sorgente parta la richiesta (FMain o Frm3). Per capire quello che sto dicendo basta dare un'occhiata ai due seguenti comandi:
ME.Cell(6, 4, FMain.Frm2.Frm3.FrmPrint01.GriStampa.Columns[0].text, TRUE, 0, "C", TRUE)
ME.Cell(6, 4, FMain.Frm11.FrmPrint01.GriStampa.Columns[0].text, TRUE, 0, "C", TRUE)
i due comandi dovrebbero ottenere lo stesso risultato, ma, purtroppo, non in maniera perfettamente alternativa, e ciò a causa della diversa modalità di richiamo della FrmPrint01. Infatti se va bene per una, l'altra causa l'errore
NUll Object.
Allora ho studiato, provato e, dopo esserci riuscito, messo in pratica il seguente metodo:
Ho costruito una nuova classe che ho chiamato
StmpRieMoG:
STATIC PUBLIC GriRiepMovg AS Object
STATIC PUBLIC iNuRiSt AS Integer
STATIC PUBLIC $TitDoc AS String
PUBLIC SUB _new(GridInput AS Object, $Titolo AS String, iTotRighe AS Integer)
'------------------------------------------
GriRiepMovg = GridInput
$TitDoc = $Titolo
iNuRiSt = iTotRighe
END
Dentro la FrmPrint01 ho trasferito in essa i dati necessari per la stampa :
DIM GriStampa AS StmpRieMoG
----- bla ----- bla ----- bla -----
GriStampa = NEW StmpRieMoG(GridStamp, ME.Text, iTotRgStamp)
RANDOMIZE
pdf = NEW Repo03pdf("Portrait", "mm", "A5")
----- bla ----- bla ----- bla -----
Infine nella WriterPdf.Repo03pdf, ho poteuto, finalmente leggere dalla gridview copiata prima in StmpRieMoG, i dati da stampare:
ME.Cell(6, 4, StmpRieMog.GriRiepMovg.Columns[0].text, TRUE, 0, "C", TRUE)
ME.Cell(72, 4, StmpRieMog.GriRiepMovg.Columns[1].text, TRUE, 0, "C", TRUE)
ME.Cell(28, 4, StmpRieMog.GriRiepMovg.Columns[2].text, TRUE, 0, "C", TRUE)
ME.Cell(18, 4, StmpRieMog.GriRiepMovg.Columns[3].text, TRUE, 0, "C", TRUE)
ME.Cell(18, 4, StmpRieMog.GriRiepMovg.Columns[4].text, TRUE, 0, "C", TRUE)
----- bla ----- bla ----- bla -----
$StriMia = StmpRieMog.GriRiepMovg[i, 0].text
ME.Cell(6, 4, $StriMia, TRUE, 0, "R", FALSE)
----- bla ----- bla ----- bla -----
Il risultato ottenuto è splendido, tuttavia mi lascia perplesso lo spazio occupato in memoria dalla duplicazione della gridfview, in forma statica. Infatti la dichiarazione
STATIC PUBLIC GriRiepMovg AS Object fatta nella nuova classe impegna certamente un tot di memoria, ma da quando e per quanto tempo? Dall'avvio del programma? Da quando viene richiamata per la prima volta? Inoltre, l'impegno di memoria rimane fino alla conclusione del programma o fino alla chiusura delle form che ne fanno uso?
Mi sono dilungato un pò troppo, lo so, ma il mio desiderio di conoscenza è grandissimo, per cui grazie anticipate ìa chi possa colmare la mia ignoranza.