Newsgroup: it.comp.lang.visual-basic
Titolo: Anteprima di stampa com Picture box

Salve a tutti...
Si è parlato più di una volta di ottenere le anteprime di stampa utilizzando i
Picture box: si fa una routine di stampa che si riferisce ad un generico oggetto
target, e a seconda di quello che serve si passa il riferimento all'oggetto
printer oppure ad una picture box.
In teoria tutto ok, se non fosse che, pur settando il printer.font =
picturebox.form, la proprietà textheight è diversa per i due oggetti, con le
ovvie conseguenze di differenza di impaginazione tra anteprima e stampa, nel
caso di documenti multipagina.
Nel mio piccolo ho risolto la cosa gestendo i ritorni a capo in "manuale",
aumentando il currenty sempre con il textheight della stampante, ma c'è un modo
un po' più elegante?
Insomma, c'è il modo di ottenere che il textheight dei due oggetti sia uguale?
Salutoni e ringraziamenti anticipati
Sergio

 picturebox.form, la proprietà textheight è diversa per i due oggetti,
Aspe'... nella mia esperienza, se il font è lo stesso e ovviamente
nella stessa dimensione, e lo ScaleMode è uguale, il risultato di una
TextWidth è identico.
L'unica differenza potrebbe essere se il font in questione non è
disponibile per entrambi gli ambienti (video e stampa), per questo
uso sempre font TrueType (o al massimo Type1 se c'è l'ATM
installato). Non è che cerchi di usare un font bitmap ?
Bye, G.

 installato). Non č che cerchi di usare un font bitmap ?
Arial e TimesNewRoman credo siano true type, comunque verificherň, anzi di
piů...
Salutoni
Sergio

 anzi di più...
E rieccomi...
Ho fatto una form
Ci ho appiccicato un bottone
Nell'evento click del bottone ho scritto:
Private Sub Command1_Click()
Dim f As StdFont
Dim f2 As StdFont
Dim i As Integer
Dim j As Integer
Dim Punti(2) As Integer
Dim NomeFont As String
Const sProva As String = "Stringa di Prova"
Dim NumFile As Integer
Punti(0) = 10
Punti(1) = 15
Punti(2) = 20
Set f = New StdFont
Set f2 = New StdFont
NumFile = FreeFile
Open App.Path & "\Dimensioni.txt" For Output As NumFile
Me.ScaleMode = Printer.ScaleMode
For i = 0 To Printer.FontCount - 1
    f.Name = Printer.Fonts(i)
    f2.Name = Printer.Fonts(i)
    Print #NumFile, "Carattere: " & f.Name
    For j = 0 To 2
        Print #NumFile, "Punti: " & Punti(j)
        f.Size = Punti(j)
        f2.Size = Punti(j)
        Set Printer.Font = f
        Set Me.Font = f2
        Print #NumFile, "Altezza su stampante " & Printer.TextHeight(sProva)
        Print #NumFile, "Altezza su Form " & Me.TextHeight(sProva)
        Print #NumFile, "Larghezza su stampante " & Printer.TextWidth(sProva)
        Print #NumFile, "Larghezza su Form " & Me.TextWidth(sProva)
    Next
    Print #NumFile,
Next
Close #NumFile
End Sub
Ho letto il file generato: non ce n'è uno che coincida in entrambe i parametri.
Nel senso che qualcuno ha la stessa altezza, ma non la stessa larghezza.
Se volete divertirvi ancora di più, sostituite l'istruzione
Set me.Font = f2
con
Set me.Font = f
A me, su una macchina W98 e su una W2000 (non provato su altre) dà dei risultati
veramente divertenti....
Salutoni
Sergio

 Nel senso che qualcuno ha la stessa altezza, ma non la stessa larghezza.
Primo o poi ti spiegherò perché a me il problema non si verificava,
(è troppo lungo, ma in breve: uso solo una dozzina di font e per
puro C#10 con quelle funziona) ma ti confermo che funziona così
(cioè male, per alcune font). Ho smanettato in vari modi col tuo
codice e con quello che usavo io; in genere lo scarto si aggira
intorno al 2/3%, ma in alcuni casi arriva al 20, e questo NON E'
ACCETTABILE. :-(
Se ti serve una precisione maggiore potresti dare un'occhiata
alla "GetTextExtentPoint32", la trovi partendo da qui:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_56yb.asp
ce ne dovrebbero essere delle implementazioni in VB in giro...
sperando che non dia lo stesso problema. Ho l'impressione
che la TextWidth di VB sia un wrapper per quella e in questo
caso sono "augelli per diabetici".
P.S.: non so se ringraziarti o dirti "te possino...", ora tocca pure
a me riscrivere quella &#%=/$ di funzione, in modo da non
rischiare sorprese in futuro. :-((
Bye, G.

 ACCETTABILE. :-(
A volte odio avere ragione :-(
--
Salutoni
Sergio