Aide et Support

Le texte d'un contrôle RichTextBox comment imprimé en utilisant Visual Basic .NET ou Visual Basic 2005

Traduction automatique
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/) .

Résumé

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.

Retour au début

Créez un contrôle RichTextBoxPrintCtrl

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.

Retour au début

Testez le contrôle

Pour tester le contrôle, procédez comme suit :
1. 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.

Retour au début

Références

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 :
RichTextBox Class
http://msdn2.microsoft.com/en-us/library/system.windows.forms.richtextbox(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.windows.forms.richtextbox(vs.71).aspx)

Retour au début


Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
Microsoft Visual Basic 2005
Microsoft Visual Basic .NET 2003 Standard Edition
Microsoft Visual Basic .NET 2002 Standard Edition

Retour au début

Mots-clés : 
kbvs2005swept kbvs2005applies kbprint kbinheritance kbwindowsforms kbctrl kbcontrol kbhowtomaster kbhowto KB811401 KbMtfr kbmt

Retour au début

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’accordPas du tout d’accord
987654321
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.

Traductions disponibles

 

Centres de solutions associés

Autres options de support

Options de page