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
[visual basic 2005] Stampare il contenuto di una richtextbox con font ...
lunedì 30 luglio 2007 - 08.54
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
platino
Profilo
| Junior Member
82
messaggi | Data Invio:
lun 30 lug 2007 - 08:54
salve a tutti.
Ho bisogno di creare un pulsante con il quale cambio il carattere del testo selezionato di una richtextbox. Qual è ilo codice, ammettendo ke la richtextbox ha per nome "richtextbox1", il pulsante "button1" e il fontdialog "fontdialog1"
Le domande però non sono ancora finite.
Ho bisogno anche di stampare il contenuto di una richtextbox. Fino qui ci siamo, ma quando il carattere delle parole della richtextbox cambiano (in grasseto), lui mi stampa in testo normale.
Il codice ke ho usato è il seguente:
Per il button
Me.PrtStampa.print
Per il printdocument:
e.graphics.drawing (Me.richtextbox1.text, Me.font, Brushes.black, 60,250)
Secondo me il problema deriva dal codice tra parentesi.
Come risolvo???
_____platino_____
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
lun 30 lug 2007 - 22:26
>salve a tutti.
Caro amico, ciao.
>Ho bisogno di creare un pulsante con il quale cambio il carattere del testo selezionato di una richtextbox. Qual è ilo codice, >ammettendo ke la richtextbox ha per nome "richtextbox1", il pulsante "button1" e il fontdialog "fontdialog1"
' Apre il fontdialog e in caso di conferma del font selezionato modifica il font relativo al testo selezioanto nella richtextbox
If Me.FontDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Me.RichTextBox1.SelectionFont = Me.FontDialog1.Font
End If
>Le domande però non sono ancora finite.
>Ho bisogno anche di stampare il contenuto di una richtextbox. Fino qui ci siamo, ma quando il carattere delle parole della >richtextbox cambiano (in grasseto), lui mi stampa in testo normale.
>Il codice ke ho usato è il seguente:
>Per il button
>Me.PrtStampa.print
>Per il printdocument:
>e.graphics.drawing (Me.richtextbox1.text, Me.font, Brushes.black, 60,250)
>Secondo me il problema deriva dal codice tra parentesi.
>Come risolvo???
Qui l'affare si fa serio...
vai a questo link
http://support.microsoft.com/kb/811401
troverai quello che ti server.
>_____platino_____
Se hai bisogno di aiuto sono sempre a disposizione.
Ciao
Alessandro
platino
Profilo
| Junior Member
82
messaggi | Data Invio:
lun 30 lug 2007 - 22:32
ciao. ho gia provato con quel codice, ma niente.
t prego aiutami.
senti...ora devo andare a dormire.
Te rispondimi lo stesso troverari la risposta domani mattina.
controlla il thread, mi raccomando!!!
buona notte
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
lun 30 lug 2007 - 22:35
Hai problemi nella modifica del font nella richtextbox oppure nella stampa?
platino
Profilo
| Junior Member
82
messaggi | Data Invio:
mar 31 lug 2007 - 09:28
io ho problemi nella stampa: mi stampa in un solo carattere (Times New Roman) e io vorrei ke mi stampasse in tutti i caratteri ke contiene la richtextbox (anche in grassetto)
_____platino_____
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
mar 31 lug 2007 - 13:35
Ma hai già provato seguendo quanto indicato al link
http://support.microsoft.com/kb/811401
?
platino
Profilo
| Junior Member
82
messaggi | Data Invio:
mar 31 lug 2007 - 18:12
si
_____platino_____
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
mar 31 lug 2007 - 22:51
Allora, ho appena provato io seguendo passo passo le istruzioni del link che ti ho riportato (un pò a fatica considerata la traduzione indegna..!
).
Funziona alla perfezione!
Cerco di sintetizzarti la procedura:
PRIMA PARTE (Genera la libreria):
1. Crea un nuovo progetto come Libreria di Classi.
2. Rinomina la classe predefinita che viene proposta come 'Class1' in 'RichTextBoxPrintCtrl'
3. Elimina tutto il codice (proprio tutto), contenuto nella classe
4. Copia il seguente codice (così come stà)
Option Explicit On
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Runtime.InteropServices
Imports System.Drawing.Printing
Namespace RichTextBoxPrintCtrl
Public Class RichTextBoxPrintCtrl
Inherits RichTextBox
' Convert the unit that is used by the .NET framework (1/100 inch)
' and the unit that is used by Win32 API calls (twips 1/1440 inch)
Private Const AnInch As Double = 14.4
<StructLayout(LayoutKind.Sequential)> _
Private Structure RECT
Public Left As Integer
Public Top As Integer
Public Right As Integer
Public Bottom As Integer
End Structure
<StructLayout(LayoutKind.Sequential)> _
Private Structure CHARRANGE
Public cpMin As Integer ' First character of range (0 for start of doc)
Public cpMax As Integer ' Last character of range (-1 for end of doc)
End Structure
<StructLayout(LayoutKind.Sequential)> _
Private Structure FORMATRANGE
Public hdc As IntPtr ' Actual DC to draw on
Public hdcTarget As IntPtr ' Target DC for determining text formatting
Public rc As Rect ' Region of the DC to draw to (in twips)
Public rcPage As Rect ' Region of the whole DC (page size) (in twips)
Public chrg As CHARRANGE ' Range of text to draw (see above declaration)
End Structure
Private Const WM_USER As Integer = &H400
Private Const EM_FORMATRANGE As Integer = WM_USER + 57
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr) As IntPtr
' Render the contents of the RichTextBox for printing
' Return the last character printed + 1 (printing start from this point for next page)
Public Function Print(ByVal charFrom As Integer, ByVal charTo As Integer, ByVal e As PrintPageEventArgs) As Integer
' Mark starting and ending character
Dim cRange As CHARRANGE
cRange.cpMin = charFrom
cRange.cpMax = charTo
' Calculate the area to render and print
Dim rectToPrint As RECT
rectToPrint.Top = e.MarginBounds.Top * AnInch
rectToPrint.Bottom = e.MarginBounds.Bottom * AnInch
rectToPrint.Left = e.MarginBounds.Left * AnInch
rectToPrint.Right = e.MarginBounds.Right * AnInch
' Calculate the size of the page
Dim rectPage As RECT
rectPage.Top = e.PageBounds.Top * AnInch
rectPage.Bottom = e.PageBounds.Bottom * AnInch
rectPage.Left = e.PageBounds.Left * AnInch
rectPage.Right = e.PageBounds.Right * AnInch
Dim hdc As IntPtr = e.Graphics.GetHdc()
Dim fmtRange As FORMATRANGE
fmtRange.chrg = cRange ' Indicate character from to character to
fmtRange.hdc = hdc ' Use the same DC for measuring and rendering
fmtRange.hdcTarget = hdc ' Point at printer hDC
fmtRange.rc = rectToPrint ' Indicate the area on page to print
fmtRange.rcPage = rectPage ' Indicate whole size of page
Dim res As IntPtr = IntPtr.Zero
Dim wparam As IntPtr = IntPtr.Zero
wparam = New IntPtr(1)
' Move the pointer to the FORMATRANGE structure in memory
Dim lparam As IntPtr = IntPtr.Zero
lparam = Marshal.AllocCoTaskMem(Marshal.SizeOf(fmtRange))
Marshal.StructureToPtr(fmtRange, lparam, False)
' Send the rendered data for printing
res = SendMessage(Handle, EM_FORMATRANGE, wparam, lparam)
' Free the block of memory allocated
Marshal.FreeCoTaskMem(lparam)
' Release the device context handle obtained by a previous call
e.Graphics.ReleaseHdc(hdc)
' Return last + 1 character printer
Return res.ToInt32()
End Function
End Class
End Namespace
5. Genera la libreria di classe dal menù Genera
SECONDA PARTE (Crea il form)
1. Apri un nuovo progetto Windows Form
2. Dal menu Strumenti seleziona 'Scegli elementi della casella degli strumenti'...
3. Dal tabs 'Componenti di .NET Frameword' clicca sul pulsante Sfoglia...
4. Trova il file DLL generato precedentemente (lo troverai nella cartella del progetto RichTextBoxPrintCtrl\BIN)
5. Una volta aggiunto il componente lo troverai nella barra degli strumenti tra i componenti aggiuntivi (in fondo in basso)
6. Trascina il nuovo controllo aggiunto in Form1
7. Trascina il componente PrintDocument1
7. Trascina i componenti PrintDialog1, PrintPreviewDialog1 e PageSetupDialog1
8. Cambia la proprietà Document di questi ultimi tre controlli selezionado 'PrintDocument1'
9. Crea tre pulsanti e cambia la loro proprietà name rispettivamente in btnPrintPreview, btnPrint,btnPageSetup
10. Cambia anche la loro proprietà text in Anteprima, Stampa, Imposta pagina
11. Ora visualizza il codice di Form1 ed eliminalo completamente
12. Copia integralmente il codice qui di seguito
Imports System
Imports System.IO
Imports System.Drawing
Imports System.Net.Mail
Public Class Form1
Private checkPrint As Integer
Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
checkPrint = 0
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
' Print the content of the RichTextBox. Store the last character printed.
checkPrint = RichTextBoxPrintCtrl1.Print(checkPrint, RichTextBoxPrintCtrl1.TextLength, e)
' Look for more pages
If checkPrint < RichTextBoxPrintCtrl1.TextLength Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub
Private Sub btnPageSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPageSetup.Click
PageSetupDialog1.ShowDialog()
End Sub
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
If PrintDialog1.ShowDialog() = DialogResult.OK Then
PrintDocument1.Print()
End If
End Sub
Private Sub btnPrintPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrintPreview.Click
PrintPreviewDialog1.ShowDialog()
End Sub
End Class
Ora puoi eseguire il progetto, scrivi quello che vuoi nella richtextbox e prova i pulsanti anteprima e stampa.
Potrai ora aggiungere altri pulsanti e istruzioni per modificare i font della tua richtextbox come già spiegato nelle precedenti puntate.
Fai molta attenzione a rispettare tutti i passaggi e a impostare i nomi dei controlli come indicato.
Una volta che hai preso confidenza potrai personalizzare il tuo form come preferisci.
Funziona che è una meraviglia!
Fammi sapere, ciao
Alessandro
platino
Profilo
| Junior Member
82
messaggi | Data Invio:
mar 31 lug 2007 - 23:12
Grazie 1000000000000000000000000000000000000
sai a 13 anni e mezzo non si puo' conoscere in tutti i particolari un linguaggio di programmazione come vb.
Sei un genio, grazie
Come potrò sdebitarmi?
_____platino_____
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
mer 1 ago 2007 - 08:17
Ma sei giovanissimo...
mi sembra di rivedere me alla tua età...
Ciao
Alessandro
P.S.: Chiudi il post con accetta 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 !