Newsgroup: it.comp.lang.visual-basic
Titolo: Anteprima di Stampa

Salve, uso l'oggetto picture per fare l'anteprima di stampa di un documento,
il mio problema è il passaggio di pagina.
In pratica uso lo stesso codice di "printer" con "picture", solo che in
picture non c'è "newpage". Come posso fare per visualizzare (mediante 2
tasti) pagina precedente, pagina successiva? (se si preme + volte il tasto
pagina successiva visualizza in picture la pagina 3, 4 ecc...)
Astm.Show
Astm.Picture1.ScaleMode = 7
Data1.Recordset.MoveFirst
Yb = 2
Astm.Picture1.CurrentX = 1
Astm.Picture1.CurrentY = 1
Astm.Picture1.FontBold = True
Astm.Picture1.FontItalic = True
Astm.Picture1.Print "ELENCO Database"
Astm.Picture1.FontBold = False
Astm.Picture1.FontItalic = False
' Qua stampo il database con un ciclo (che può essere lungo 1 o + pagine) In
questo punto avrei bisogno del salto pagina, avevo pensato al conteggio dei
record, ma non va bene.

 pagina successiva visualizza in picture la pagina 3, 4 ecc...)
Se vuoi avere una sola pagina alla volta, ti basta fare un .Cls
della PictureBox, e rimettere .CurrentX e .CurrentY = 0.
****************
Altrimenti puoi disegnare tutte le pagine su PictureBox diverse,
e usare dei pulsanti per passare dall'una all'altra. In questo caso,
usa un Array di picturebox. Mettendo la proprietà Index di una
pictureBox ad un valore qualunque, crei automaticamente
l'Array; per aggiungere una Picture e per eliminarla puoi usare
Load e Unload.
Quando arrivi a fine pagina, non fai altro che caricare un'altra
Picture e scrivere su quella, usando l'indice come riferimento.
Ti faccio un esempio. Apri un nuovo progetto, metti nel form
una picbox che chiamerai PicPagina e mettine l'indice a 1.
Aggiungi un pulsante, e inseriscici questo codice:
Private Sub Command1_Click()
     Dim NumeroPagina As Long
     For NumeroPagina = 1 To 5     ' al posto di questo form metti il tuo ciclo.
          If NumeroPagina > 1 Then Load PicPagina(NumeroPagina)
          With PicPagina(NumeroPagina)
               PicPagina(NumeroPagina).Print "Pagina numero " & NumeroPagina
               .AutoRedraw = True
               .Top = 300 * NumeroPagina
               .Left = 300 * NumeroPagina     ' le spostiamo per farle vedere
               ' tutte insieme, normalmente vanno sovrapposte e va cambiato
               ' lo ZOrder per portarne un'altra in primo piano.
               .ZOrder 0
               .Visible = True
          End With
     Next NumeroPagina
End Sub
Bye, G.

usa un Array di picturebox.
Occhio che cosi' si consuma una quantita' _impressionante_ di RAM:
ipotizza di fare la preview di un documento composto da qualche
centinaio di pagine...
-- 
ciao, hal

 centinaio di pagine...
In alternativa cosa suggeriresti ? A me l'unica cosa che viene in
mente č di fare il ciclo "a vuoto" fino alla pagina voluta, cioč
usare un flag per decidere se stampare o meno, e stampare
davvero solo una pagina alla volta. Perň in caso di un documento
complesso potrebbe essere un bel po' lento, immagino, avanzare
da una pagina all'altra. Magari nel caso in questione il problema
non si pone, ma immagina un documento tipo Word, con piů
cambiamenti di font e dimensioni, immagini e simili, devi almeno
"simulare" la stampa con TextWidth e TextHeight per decidere
in che pagina sei, giusto ?
Magari si potrebbe farlo una sola volta, all'apertura dell'anteprima,
e mantenendo dei puntatori ai vari fine pagina, che dici ?
Bye, G.

e mantenendo dei puntatori ai vari fine pagina, che dici ?
Io avevo risolto scrivendo su file in un formato da me inventato le
istruzioni da eseguire per ogni pagina. Alla selezione della pagina
da parte dell'utente, ripulivo la picture ed eseguivo le istruzioni
di scrittura/disegno che mi ero codificato per la pagina n-esima.
In questo modo riuscivo ad avere buone prestazioni anche con macchine
che adesso farebbero ridere (P133/166 con 32 MB di RAM).
-- 
ciao, hal

 record, ma non va bene.
In questa maniera posso visualizzare una pagina alla volta e visualizzare la
seguente (basta mettere un bel msgbox dopo l'istruzione Cls).
Per tornare indietro invece .... devo reiniziare dalla prima pagina.
Putroppo non trovo altro metodo per comprendere se l'oggetto su cui si
scrive è un PicBox oppure una Printer. L'objPrinter non è di aiuto in
questo.

 questo.
TypeOf?


Ora proverò e vediamo se funge, non conoscevo questo comando per VB.
BTW visto che ci siamo: sei già passato a NET oppurerimani con VB?

 BTW visto che ci siamo: sei già passato a NET oppurerimani con VB?
Net? Se me lo regalano, forse (dico forse) lo guardo...

 di scrittura/disegno che mi ero codificato per la pagina n-esima.
E se si memorizza la pagina precedente e successiva ? In pratica avere
sempre 3 pagine in memoria , 1 visibile e le 2 (precedente e successiva)
nascoste cosi che clikkando su avanti visualizzo istantaneamente la pagina
vicina e mentre visualizzo lancio la routine che carica l'altra pagina !
Es :
P1 - caricata in memoria
P2 - Pagina corrente
P3 - caricata in memoria
P4
ora mi sposto da pagina 2 a pagina 3 e carico solo P4 scaricando P1
P1
P2 - caricata in memoria
P3 - Pagina corrente
P4 - caricata in memoria
solo che nei salti pagina si andrebbero a caricare 3 pagine anziche' 1 :-/

*Gigio2k [work]* ha scritto:
... insomma, mettiamo ogni pagina cui si è fatto accesso su file (temporaneo
e da cancellare all'abbandono, mi raccomando...) e ad ogni richiamo di una
pagina "vecchia" facciamo un LoadPicture.



Non proprio: fai conto che l'immagine di ogni pagina A4 e' circa un
mega e mezzo...
-- 
ciao, hal

*hal1961* ha scritto:

E allora? La salvo su file (temporaneo, ho detto, augh!) e mi ciula un tot
di spazio di disco, ok, ma verrà liberato alla fine... Del resto se si
lavora con un disco con (oggi) meno di 30 Mb liberi ... non si lavora
E poi, eddai, se l'utente si diverte a passare da pag. 1,2,3,1,2,1,3,2,1,3,
etc., non ha molto da fare e proporrei, alla terza rivisitazione di una
stessa pagina un bel MsgBox che dice "Ma ci fai o ci sei?, vbYesOnly.
Non c'è vbYesOnly? L'ho sempre detto che in M$ sono degli sfaticati.

lavora con un disco con (oggi) meno di 30 Mb liberi ... non si lavora
Mai stampato documenti di qualche centinaio di pagine? ;-)
-- 
ciao, hal

*hal1961* ha scritto:

In anteprima? No.

Grazie 1000 a tutti!