Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Dvidere Testo (Stringa) in più linee per stampa "con testo giustificat...
martedì 12 agosto 2008 - 18.51
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ans66
Profilo
| Junior Member
62
messaggi | Data Invio:
mar 12 ago 2008 - 18:51
742_functions Stampa.zip
Avrei bisogno di un aiuto, mi basterebbe semplicemente un esempio per dividere un testo (string) in più linee per stampa con System.Drawing calcolando differenza fra pr.MarginBounds.Right - pr.MarginBounds.Left. Ho tentato di creare una funzione che allego di seguito senza successo.
I problemi che non riesco a risolvere:
a) come lanciare la funzione sotto descritta in un loop fino a che TextToPrint.ToString = vbnull string
b) StringAlignment.Near, Center, Far? (come ottenere una linea "giustificata"?)
b) l'ultima riga deve essere fuori dal loop senza alcun "StringAlignment"
Sono passato da VB6, non da molto, sto cercando di farmi un pò le ossa in VB.net (visual basic 2005 per l'esattezza)
Grazie per l'aiuto
Segue è il mio ennesimo tentativo di creare una funzione a tale scopo:
-----------------------------------
Public Function Tst_GiustXY(ByVal pr As System.Drawing.Printing.PrintPageEventArgs, ByVal Testo As String, ByVal Alto As Integer) As String
Dim Font As Font = New System.Drawing.Font("Arial", 12, FontStyle.Bold)
Dim x As Single = pr.MarginBounds.Left
Dim y As Single = Alto + 80
'recupero il testo
Dim TextToPrint As New System.Text.StringBuilder(Testo)
' linea singola da stampare
Dim Line As New System.Text.StringBuilder()
Dim tst As String = vbNullString
If pr.Graphics.MeasureString(Testo, Font).Width > (pr.MarginBounds.Right - pr.MarginBounds.Left) Then
Do
Line.Append(TextToPrint.Chars(0))
TextToPrint = TextToPrint.Remove(0, 1)
If pr.Graphics.MeasureString(Line.ToString, Font).Width > (pr.MarginBounds.Right - pr.MarginBounds.Left) Then Exit Do
Loop
Static a As Integer = 0
For i As Integer = 1 To Len(Line.ToString)
Dim str As String = Mid(Line.ToString, i, 1)
If str = Space(1) Then a = i
Next
tst = Mid(Line.ToString, 1, a)
End If
Dim rect As Rectangle = New Rectangle(x, y, (pr.MarginBounds.Right - pr.MarginBounds.Left), pr.Graphics.MeasureString(" ", Font).Height)
Dim sf As New System.Drawing.StringFormat
sf.Alignment = StringAlignment.Near
sf.LineAlignment = StringAlignment.Near
pr.Graphics.DrawString(tst, Font, _
Brushes.Black, rect, sf)
TextToPrint = New System.Text.StringBuilder(Testo)
Line = New System.Text.StringBuilder()
For i As Integer = 0 To Len(tst) - 1
Line.Append(TextToPrint.Chars(0))
TextToPrint = TextToPrint.Remove(0, 1)
Next
Return TextToPrint.ToString
End Function
--------------------------------------
willy_80
Profilo
| Senior Member
255
messaggi | Data Invio:
mar 12 ago 2008 - 21:43
Perchè non provi così:
1. Scrivi tutte le tue righe in un file così poi ti ritroverai anche un report di stampa gia pronto.
FileOpen(1, Nomefile, OpenMode.Output)
PrintLine(1, RigaDiTesto)
...
FileClose(1)
2. Rileggi tutto il file e lo stampi.
Dim Lettura as String
FileOpen(1, Nomefile, OpenMode.Intput)
Do While not EOF (1)
Lettura = LineInput(1)
"Qui puoi inserire i comandi che vuoi per stampare la riga appena letta ed appoggiata nella variabile Lettura"
Loop
FileClose(1)
ans66
Profilo
| Junior Member
62
messaggi | Data Invio:
mar 12 ago 2008 - 23:30
Se ho capito bene scrivo l'intero testo in un file poi vado in lettura misurando la lunghezza della stringa con Graphics.MeasureString(Linea.ToString, NormalFont).Width e quando arrivo alla misura massima contenuta in una linea della pagina debbo stampare con Graphics.DrawString.
Il problema che ho sempre trovato e di cui non riesco a dare risposta però è il seguente:
Graphics.MeasureString(Linea.ToString, NormalFont) viene paragonato a (pr.MarginBounds.Right - pr.MarginBounds.Left): scatta un'azione solo nel momento che Linea.ToString >(pr.MarginBounds.Right - pr.MarginBounds.Left). Domande:
a) è corretto paragonare pr.Graphics.MeasureString(LineString, Font).Width a (pr.MarginBounds.Right - pr.MarginBounds.Left) visto che il primo da un valore di pr.drawing.sizeF e il secondo Single???
b) a questo punto però bisogna toliere l'ultima parola divisa da spazio con la quale si eccede alla riga (questo da Line.Tostring) e rimetterla in TextToPrint (parola in precedenza rimossa con TextToPrint= TextToPrint.Remove(0, 1)
c) a questo punto bisogna fare in modo che il testo diventi "giustifcato" cioè ben diviso nella riga...è corretto con StringAlignment.Near (Far o Center)?
Questi 3 punti sono quelli che mi mettono davvero in crisi e non conosco bene il comportamento di StringAlignment.Near (Far o Center)
Mi piacerebbe avere un esempio pratico su cui lavorare.
Grazie tante per la risposta
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !