Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Stampa di una griglia di dati

Vi ricordate il famigerato ocx da 6000$ che devo emulare? Ci sono quasi... A
questo punto non mi rimane che stampare la mia famigerata flex grid.
Cerco il metodo print tra quelli della griglia e, meraviglia delle
meraviglie, non lo trovo...
Orbene, l'uso dell'oggetto printer mi pare duretto, specie considerando che
non l'ho mai effettivamente utilizzato, se qualcuno avesse una soluzione
meno scomoda gli sarei molto grato se me la proponesse :)
Tutto cio' che ho a disposizione e' una MSFlexGrid imbottita di dati da un
provider esterno di cui io non so nulla. Con questa flex grid posso farci
quel che mi pare purche' poi la rimetta a posto, tanto durante la stampa il
mio OCX e' invisibile.
Avevo pensato di setparentarla su un form nascosto e stampare quello, poi il
mio capo mi ha fatto notare che i dati dovrebbero essere stampati tutti, non
solo quelli visibili, percui l'idea e' stata cassata...
Inoltre a foglio devo anche mettere delle intestazioni, da ripetersi su ogni
foglio...
Se qualcuno ha suggerimenti mi fa un favore :)
Ciaotutti,
Alessandro

meraviglie, non lo trovo...
]zac[

 wrote in message
news:DeIr6.8894$6W.7...@news.infostrada.it...


Sei sicuro? quante prove hai fatto? (notare la contraddizione logica)
*Alessandro* ha scritto nel messaggio


Mah...
PrnPrv3 lo conosci?
Da me, area VB...
O nel zito comune...
Hey Pal, quante volte l'avrò scritto?
--
GbC
http://www.chiappori.net
--

 wrote in message
<98ncrk$2pi6d$1...@ID-68324.news.dfncis.de...



Downloadato... Il progetto in se' e' ottimo, il problema e' che io devo
stampare una griglia, i cui dati sono contenuti in una flex grid. I dati
devono essere adeguatamente grigliati, nel senso che se li faccio al forno
non va bene :)
Ora, ho visto un metodo PrintRefGrid, ma me ne sfugge assolutamente lo
scopo...
Prima di iniziare a sbattere la testa  su questo progetto, dato che ho
appena finito di sbatterla su un form con dei trucchi da far impallidire
silvan, quanto costerebbe secondo te riuscire a mettere in griglia i dati
stampati?
Grazie,
Alessandro

 wrote in message
news:XoMr6.20549$x3.4...@news2.tin.it...


Allora...
Sarò breve...
Da qui in poi vorrei che chi eventualmente ha da dire qualcosa prima di scrivere
ci pensi su un bel po'... Nel senso che non mi interessa sapere che per stampare
un form si può fare in questo o in quest'altro modo... Lo so anche io, grazie.
Sto parlando di poter gestire qualsiasi tipo di stampa con lo stesso set di
funzioni, in ogni programma che si scrive, per qualsiasi tipo di applicativo.
Per chi scrive in modo sistematico (lo fa per lavoro) questo è fondamentale.
Direi che il set di routines di stampa fanno parte della dotazione base di ogni
buon programmatore. PrnPrv fa tutto questo.
Dunque... In VB non esiste altro sistema valido per stampare che utilizzare
l'oggetto printer...
Qualsiasi alternativa non è professionalmente accettabile, nel senso che
rappresenta un escamotage di bassa lega per evitare di scrivere codice e
realizza delle stampe generiche; il che rende una applicazione di scarso livello
qualitativo e poco 'professionale'.
Inoltre ci si scontra inevitabilmente con delle limitazioni intrinseche nella
gestione delle stampe degli oggetti stessi. Utilizzatori di Crystal Report, ce
l'ho anche con voi.
Un esempio? L'ultimo lavoro che abbiamo fatto è un gestore di spool per una
ditta che deve stampare 40.000 resoconti di 6/7 pagine al mese, ed inviarli in
tutta Italia per posta. Avevano iniziato con Crystal Reports, poi ci hanno fatto
scrivere un programma per farlo. Gli stumenti pronti sono bellini e divertenti,
ma la flessibilità si perde. Se poi sono anche flessibili hanno dei costi
improponibili. Dove non si risolveva il problema? Intanto il numero di pagine
non era fisso... Poi alcune sono in orizzontale ed altre in verticale... Le
verticali andavano stampate in fronte retro... In ogni pagina si doveva inserire
il codice a barre per l'imbustatrice...
Quindi, per generare pagine di stampa di buon livello non si può fare altro che
crearne direttamente i contenuti. Sembra complesso, ma una volta compreso il
meccanismo diventa banale.
Nel caso di una griglia basta scorrerne le righe e le colonne con un ciclo, ed
inviarne i dati attraverso una delle funzioni previste; la coordinata Y è
facilmente parametrizzabile. Se volete un esempio basta richiederlo qui nel NG
che provvedo ad inviarlo al SC.
Dal punto di vista strettamente logico, il ciclo sarebbe questo:
din NumeroPagine as integer
dim InizioPagina as boolean
dim CoordinataY as single
dim PrimaRiga as single 'Y in centimetri della prima riga
PrimaRiga = 2 'supponiamo che la prima riga disponibile sia a 2 cm dal margine
superiore)
dim FinePagina as single 'oltre questa misura non stampare, in centimetri
FinePagina = 27 'in cm
NumeroPagine = 0
InizializzaRoutineDiStampa
InizioPagina = true
do
    if InizioPagina = true then
        StampaIntestazioni 'vedi PrintHeader di PrnPrv
        NumeroPagine = NumeroPagine + 1
        StampaModuloVuoto 'questa te la scrivi tu ed è la tua pagina senza i
dati
        CoordinataY = PrimaRiga
        InizioPagina = False
    end if
    for l=1 to NumeroColonne
        ' per dati di larghezza fissa si possono usare
        ' PrintInLef, InRig, InCen...
        ' la PrintJust usa una variabile locale lOfs che ti riporta la
coordinata
        ' Y dopo il riallineamento su più righe del testo... così puoi ripartire
da lì...
        PrintInLef 2,CoordinataY,DatiColonna1,Font,FontSize,FontBold,0
        PrintInLef 2+1,CoordinataY,DatiColonna2,Font,FontSize,FontBold,0
        PrintInLef 2+4,CoordinataY,DatiColonna3,Font,FontSize,FontBold,0
        PrintInLef 2+7,CoordinataY,DatiColonna4,Font,FontSize,FontBold,0
        PrintInLef 2+18,CoordinataY,DatiColonna5,Font,FontSize,FontBold,0
    next l
    se RigaSuccessivaGriglia > RigheGriglia then
        'fine dati griglia!
        ' ho stampato tutto!
        StampaFondoPagina
        exit do
    else
        SpostatiRigaSuccessivaGriglia
    end if
    se CoordinataY = FinePagina then
        StampaFondoPagina 'vedi PrintFooter di PrnPrv
        InizioPagina = True
    else
        CoordinataY = CoordinataY + Interlinea
    end if
while
Non mi pare sconvolgentemente complesso...
Ed è molto flessibile...
Bada... In alcun caso voglio convincerti; ma qui realizziamo software
commerciale. In alcuni casi dobbiamo stampare centinaia di pagine, ed alla fine
del gioco le funzioni di stampa ce le siamo riscritte.
--
GbC
http://www.chiappori.net
--
PS:
Scusa... Ho riletto bene il tuo messaggio...
Costerebbe?
Non voglio farlo io...
Fallo tu, così da qui in poi saprai come si fa :))
PrintRefGrid...
Stampa una pagina di carta millimetrata, e serve come riferimento per sapere le
coordinate di dove andare a stampare... Per quanto Windows prometta
l'indipendenza dall'hardware è sempre raccomandabile stamparsi la griglia di
riferimento, per sapere quali effettivamente sono le coordinate fisiche
dell'area utilizzabile.

 Sarò breve...
... per cosi' dire :)
archivio il tuo post, e me lo tengo per qualche momento in cui il cervello
sara' in funzione. sperando che lo sia in modo particolarmente brillante,
dalla scorsa che ho dato...
aggiungo solo, se ci sono urgenze, che il nostro bravo ilMes (*) aveva fatto
un ocx per stampare i recordset, che direi funzionasse. non so se lo ha
ancora fuori sul suo sito. se e' per il collo alessandro potrebbe provare a
chiedere a lui...
(*) ero agli inizi: gliel'ho chiesto, e me l'ha mandato, con codice di
attivazione... io ero terrorizzato, non pensavo che un essere umano potesse
produrre un oggetto simile. poi l'ho anche conosciuto di persona e da allora
sono cresciuto 15 cm buoni :)
ciao, a.


No, scusa, questa non l'ho capita... Riferimento rispetto a cosa? Rispetto
ad un A4? Se la stampante dell'utente per qualche ragione sua ha dei
riferimenti diversi ho modo di tutelarmi?
Ciao e grazie,
Alessandro

ci pensi su un bel po'... Nel senso che non mi interessa sapere che per
stampare
]zac]

 Bye.


Certo che esiste.
Bye.


con attenzione...
Più che impedire (?) ti dice fin dove è arrivato.



Ma io non voglio che vada dove gli pare :)
Io voglio che, data una griglia di dimensione fissa, il testo eccedente
venga tagliato.
Inoltre il testo deve essere allineato alla griglia, la quale puo' avere
righe di altezza variabile... Ma il testo deve sempre occupare una sola
linea, niente wrap.
Non mi pare cosi' banale ottenere questo risultato, per questo speravo ci
fosse qualcosa di pronto in giro.
Ciao,
Alessandro

Ok...
Auguri :)
