Como imprimir o conteúdo de um controle RichTextBox usando Visual Basic .NET ou Visual Basic 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 811401
Para uma versão deste artigo do Microsoft Visual Basic 6.0, consulte 146022.
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 812425.
Sumário
Este artigo passo a passo descreve como imprimir o conteúdo de um controle RichTextBox . O controle RichTextBox não fornece um método para imprimir seu conteúdo. No entanto, você pode estender a classe RichTextBox para usar a mensagem EM_FORMATRANGE. Você pode então enviar o conteúdo de um RichTextBox para um dispositivo de saída, como uma impressora.

Criar um controle RichTextBoxPrintCtrl

Para estender a classe RichTextBox e usar EM_FORMATRANGE para imprimir o conteúdo do controle RichTextBox , execute estas etapas:
  1. Use o Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005 para criar uma nova classe projeto Library chamado RichTextBoxPrintCtrl .

    Por padrão, Class1.vb é criado.
  2. Altere o nome do arquivo Class1.vb para RichTextBoxPrintCtrl.vb .
  3. No Solution Explorer, clique com o botão direito do mouse em References e, em seguida, clique em Add Reference .
  4. Na caixa de diálogo Add Reference , clique duplo em System.Drawing.dll e, em seguida, clique duas vezes em System.Windows.Forms.dll .
  5. Para adicionar referências, clique em OK .
  6. Exclua o código existente no RichTextBoxPrintCtrl.vb .
  7. Copy the following code to RichTextBoxPrintCtrl.vb:
    Option Explicit On Imports SystemImports System.Windows.FormsImports System.DrawingImports System.Runtime.InteropServicesImports System.Drawing.PrintingNamespace 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 ClassEnd Namespace
  8. Para criar RichTextBoxPrintCtrl.dll , clique em Build Solution no menu Build .

Testar o controle

Para testar o controle, execute essas etapas:
  1. Crie um novo projeto Windows Application usando Visual Basic .NET ou Visual Basic 2005.

    Por padrão, Form1.vb é criado.
  2. A partir da caixa de ferramentas, arraste um botão para Form1. Altere o nome para btnPageSetup e altere o texto para Configurar página .
  3. A partir da caixa de ferramentas, arraste o outro botão para Form1. Altere o nome para btnPrintPreview e altere o texto para Visualização .
  4. A partir da caixa de ferramentas, arraste o outro botão para Form1. Altere o nome para btnPrint e altere o texto para impressão .
  5. Na caixa de ferramentas, clique duas vezes em PrintDialog , clique duas vezes em PrintPreviewDialog , clique duas vezes em PrintDocument e, em seguida, clique duas vezes PageSetupDialog para adicionar esses controles para Form1.
  6. Modifica a propriedade Document de PrintDialog1 , PrintPreviewDialog1 e PageSetupDialog1 para PrintDocument1 .
  7. No menu Ferramentas , clique em Customize Toolbox .
  8. Clique em .NET Framework Components , clique em Procurar , clique para selecionar RichTextBoxPrintCtrl.dll e, em seguida, clique em OK .
  9. Na caixa de ferramentas, arraste RichTextBoxPrintCtrl para Form1.
  10. Na Solution Explorer, clique com o botão direito do mouse em Form1.vb e, em seguida, clique em View Code .
  11. Adicione o seguinte código à classe 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. Para executar o aplicativo, clique em Iniciar no menu Debug .
  13. Digite texto na RichTextBoxPrintCtrl .
  14. Para definir as configurações de página, clique em Configurar página .
  15. Para ver uma visualização da página, clique em impressão visualizar .
  16. Para imprimir o conteúdo da RichTextBoxPrintCtrl , clique em Imprimir .
Referências
Para obter mais informações, visite a documentação do Microsoft .NET Framework Software Development Kit (SDK) ou a seguinte site da Ajuda on-line de MSDN:

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 811401 - Última Revisão: 11/13/2007 09:46:36 - Revisão: 5.5

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbprint kbinheritance kbwindowsforms kbctrl kbcontrol kbhowtomaster kbhowto KB811401 KbMtpt
Comentários