IMPORTANT
: Cet article est issu du système de traduction automatique mis au
point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un
certain nombre d’articles obtenus par traduction automatique sont en
effet mis à votre disposition en complément des articles traduits en
langue française par des traducteurs professionnels. Cela vous permet
d’avoir accès, dans votre propre langue, à l’ensemble des articles de
la base de connaissances rédigés originellement en langue anglaise. Les
articles traduits automatiquement ne sont pas toujours parfaits et
peuvent comporter des erreurs de vocabulaire, de syntaxe ou de
grammaire (probablement semblables aux erreurs que feraient une
personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à
part ces imperfections, ces articles devraient suffire à vous orienter
et à vous aider à résoudre votre problème. Microsoft s’efforce aussi
continuellement de faire évoluer son système de traduction automatique.
Si vous relevez des erreurs graves et souhaitez contribuer à
l’amélioration du système, vous pouvez compléter l’enquête à votre
disposition dans le bas des articles.
La version anglaise de cet article est la suivante: 811401 (http://support.microsoft.com/kb/811401/en-us/)
Numéro d'article
:
811401
Dernière mise à jour
:
mardi 13 novembre 2007
Version
:
5.5
Pour une version Microsoft Visual Basic 6.0 de cet article, voyez
146022 (http://support.microsoft.com/kb/146022/EN-US/).
Pour une version Microsoft Visual C# .NET de cet article, voyez
812425 (http://support.microsoft.com/kb/812425/)
.
Cet article décrit étape par étape comment le texte d'un contrôle
RichTextBox imprimé. Le contrôle RichTextBox ne fournit pas une méthode
pour imprimer son contenu. Vous pouvez toutefois étendre la classe
RichTextBox pour utiliser le message EM_FORMATRANGE. Vous pouvez puis
envoyer le contenu d'un RichTextBox à un appareil de sortie tels qu'une
imprimante.
Pour étendre la classe RichTextBox et pour utiliser EM_FORMATRANGE pour
imprimer le contenu du contrôle RichTextBox, procédez comme suit :
1.
Utilisez Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005
pour créer un nouveau projet de bibliothèque de classes nommé
RichTextBoxPrintCtrl.
Par défaut Class1.vb est créé.
2.
Changer le nom du fichier Class1.vb à
RichTextBoxPrintCtrl.vb.
3.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Références et puis cliquez sur Ajouter une référence.
4.
Dans la boîte
de dialogue Ajouter une référence, double-cliquez sur
System.Drawing.dll et double-cliquez sur System.Windows.Forms.dll.
5.
Pour ajouter des références, cliquez sur OK.
6.
Supprimez le code existant dans RichTextBoxPrintCtrl.vb.
7.
Copiez le code suivant dans RichTextBoxPrintCtrl.vb :
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
8.
Pour créer RichTextBoxPrintCtrl.dll, cliquez sur Générer la solution dans le menu Générer.
Créez un projet d'application Windows en utilisant Visual Basic .NET ou Visual Basic 2005.
Par défaut Form1.vb est créé.
2.
De la Boîte à outils, faites glisser un bouton vers Form1. Modifiez le nom en
btnPageSetup, Et vous en modifiez le Texte Page
Setup.
3.
De la Boîte à outils, faites glisser un autre bouton vers Form1. Modifiez le nom en
btnPrintPreview , Et vous en modifiez le Texte
Print Preview.
4.
De la Boîte à outils, faites glisser un autre bouton vers Form1. Modifiez le nom en
btnPrint , Et vous en modifiez le Texte
Print.
5.
Dans la Boîte à outils, double-cliquez sur PrintDialog, double-cliquez
sur contrôle PrintPreviewDialog, double-cliquez sur PrintDocument et
double-cliquez sur PageSetupDialog afin d'ajouter ces contrôles à
Form1.
6.
Modifiez la propriété Document de PrintDialog1, PrintPreviewDialog1 et PageSetupDialog1 à
PrintDocument1.
7.
Dans le menu Outils, cliquez sur Personnaliser la boîte à outils.
8.
Cliquez sur Composants .NET Framework, cliquez sur Parcourir, sélectionnez RichTextBoxPrintCtrl.dll et puis cliquez sur OK.
9.
De la Boîte à outils, faites glisser RichTextBoxPrintCtrl vers Form1.
10.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Form1.vb et puis cliquez sur Afficher le code.
11.
Ajoutez le code suivant à 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.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
12.
Pour exécuter l'application, cliquez sur Démarrer dans le menu Déboguer.
13.
Tapez le texte dans RichTextBoxPrintCtrl.
14.
Pour définir les paramètres de page, cliquez sur Mise en page.
15.
Pour visualiser un aperçu de la page, cliquez sur Aperçu avant impression.
16.
Pour imprimer le contenu de RichTextBoxPrintCtrl, cliquez sur Imprimer.
Pour plus d'informations, consultez la Documentation Microsoft .NET
Framework Software Development Kit (SDK) ou le site Web Web d'aide MSDN
suivant en ligne :
L'INFORMATION
CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE
D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE
DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE
REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Veuillez nous faire part de vos commentaires sur cet article technique :
Cet article vous a-t-il aidé à résoudre votre problème ?
Oui
Non
Partiellement
Je ne sais pas encore
Entièrement d’accord
Pas du tout d’accord
9
8
7
6
5
4
3
2
1
L'article est facile à comprendre :
L’article est précis :
Commentaires supplémentaires :
Attention,
cette interface de soumission d'enquête n’est pas un moyen de joindre
le support technique Microsoft. Veuillez soumettre vos demandes liées à
des difficultés techniques en utilisant les informations et ressources
en ligne disponibles sur ce site (pages "Contactez-nous" ou des
"Services de support en ligne"). De plus, afin de garantir la
protection de vos données personnelles, n’indiquez pas vos coordonnées
dans vos commentaires.
Merci
! Vos commentaires sont utilisés pour nous aider à améliorer la qualité
de notre contenu de support technique en ligne. Pour consulter les
différentes options d'aide et de support disponibles, visitez la page d’accueil du site Aide et Support.