Como imprimir o conteúdo de um controle RichTextBox usando translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 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: 812425
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 811401.
Sumário
Este artigo passo a passo descreve como imprimir o conteúdo de um controle RichTextBox . O controle RichTextBox não fornece qualquer método para imprimir o conteúdo do RichTextBox. Você pode estender a classe RichTextBox para usar a mensagem EM_FORMATRANGE para enviar o conteúdo de um controle RichTextBox para um dispositivo de saída, como impressora.

Criar controle RichTextBoxPrintCtrl

O exemplo a seguir descreve como estender a classe RichTextBox e como usar EM_FORMATRANGE para imprimir o conteúdo do controle RichTextBox .
  1. No Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005, crie um novo projeto Class Library chamado RichTextBoxPrintCtrl. Por padrão, Class1.cs é criado.
  2. Altere o nome de Class1.cs para RichTextBoxPrintCtrl.cs.
  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 duas vezes em System.Windows.Forms.dll e System.Drawing.dll e, em seguida, clique em OK .
  5. Replace the existing code in RichTextBoxPrintCtrl.cs with the following code:
    using System;using System.Windows.Forms;using System.Drawing;using System.Runtime.InteropServices;using System.Drawing.Printing;namespace RichTextBoxPrintCtrl{	public class RichTextBoxPrintCtrl:RichTextBox	{		//Convert the unit used by the .NET framework (1/100 inch) 		//and the unit used by Win32 API calls (twips 1/1440 inch)		private const double anInch = 14.4;		[StructLayout(LayoutKind.Sequential)] 			private struct RECT		{			public int Left;			public int Top;			public int Right;			public int Bottom;		}		[StructLayout(LayoutKind.Sequential)]			private struct CHARRANGE		{			public int cpMin;         //First character of range (0 for start of doc)			public int cpMax;           //Last character of range (-1 for end of doc)		}		[StructLayout(LayoutKind.Sequential)]			private struct FORMATRANGE		{			public IntPtr hdc;             //Actual DC to draw on			public IntPtr hdcTarget;       //Target DC for determining text formatting			public RECT rc;                //Region of the DC to draw to (in twips)			public RECT rcPage;            //Region of the whole DC (page size) (in twips)			public CHARRANGE chrg;         //Range of text to draw (see earlier declaration)		}		private const int WM_USER  = 0x0400;		private const int EM_FORMATRANGE  = WM_USER + 57;				[DllImport("USER32.dll")]		private static extern IntPtr SendMessage (IntPtr hWnd , int msg , IntPtr wp, IntPtr lp); 		// Render the contents of the RichTextBox for printing		//	Return the last character printed + 1 (printing start from this point for next page)		public int Print( int charFrom, int charTo,PrintPageEventArgs e)		{			//Calculate the area to render and print			RECT rectToPrint; 			rectToPrint.Top = (int)(e.MarginBounds.Top * anInch);			rectToPrint.Bottom = (int)(e.MarginBounds.Bottom * anInch);			rectToPrint.Left = (int)(e.MarginBounds.Left * anInch);			rectToPrint.Right = (int)(e.MarginBounds.Right * anInch);			//Calculate the size of the page			RECT rectPage; 			rectPage.Top = (int)(e.PageBounds.Top * anInch);			rectPage.Bottom = (int)(e.PageBounds.Bottom * anInch);			rectPage.Left = (int)(e.PageBounds.Left * anInch);			rectPage.Right = (int)(e.PageBounds.Right * anInch);			IntPtr hdc = e.Graphics.GetHdc();			FORMATRANGE fmtRange;			fmtRange.chrg.cpMax = charTo;				//Indicate character from to character to 			fmtRange.chrg.cpMin = charFrom;			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 size of page			IntPtr res = IntPtr.Zero;			IntPtr wparam = IntPtr.Zero;			wparam = new IntPtr(1);			//Get the pointer to the FORMATRANGE structure in memory			IntPtr lparam= 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();		}	}}
  6. No menu Build , clique em Build Solution para criar RichTextBoxPrintCtrl.dll.

Testar o controle

  1. No Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005, criar um novo Windows Application projeto. Por padrão, Form1.cs é criado.

    Observação O código deve ser alterado no Visual Studio 2005. Quando você cria um projeto Windows Forms, translation from VPE for Csharp Visual adiciona um formulário para o projeto por padrão. Este formulário é denominado Form1. Os dois arquivos que representam o formulário são denominados Form1.cs e Form1.Designer.cs. Tem de escrever seu código no Form1.cs. O ficheiro Designer.cs é onde o Windows Forms Designer escreve o código que implementa todas as ações que você executou adicionando controles. Para obter mais informações sobre o Windows Forms Designer no Visual translation from VPE for Csharp 2005, visite o seguinte site:
  2. Arraste um controle de botão da caixa de ferramentas para Form1. Altere a propriedade Name btnPageSetup e a propriedade Text para Configurar página .
  3. Arraste outro controle de botão da caixa de ferramentas para Form1. Altere a propriedade Name para btnPrintPreview e a propriedade Text para Visualização .
  4. Arraste outro controle de botão da caixa de ferramentas para Form1. Altere a propriedade Name para btnPrint e a propriedade de texto para Imprimir .
  5. Na caixa de ferramentas, clique duas vezes PrintDialog , PrintPreviewDialog , PrintDocument e PageSetupDialog para adicionar esses controles para Form1.
  6. Modificar as propriedades documento de PrintDialog1 , PrintPreviewDialog1 e os controles PageSetupDialog1 PrintDocument1 .
  7. No menu Ferramentas , clique em Customize Toolbox .
  8. Na guia .NET Framework Components , clique em Procurar , clique para selecionar RichTextBoxPrintCtrl.dll e, em seguida, clique em OK .
  9. Arraste RichTextBoxPrintCtrl da caixa de ferramentas para Form1.
  10. No Solution Explorer, clique com o botão direito do mouse em Form1.cs e, em seguida, clique em View Code .
  11. Acrescentar o código a seguir ao método InitializeComponent :
    		this.printDocument1.BeginPrint += new System.Drawing.Printing.PrintEventHandler(this.printDocument1_BeginPrint);		this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage);		this.btnPrint.Click += new System.EventHandler(this.btnPrint_Click);		this.btnPrintPreview.Click += new System.EventHandler(this.btnPrintPreview_Click);		this.btnPageSetup.Click += new System.EventHandler(this.btnPageSetup_Click);
  12. Adicione o seguinte código à classe Form1:
    		private int checkPrint;		private void btnPageSetup_Click(object sender, System.EventArgs e)		{			pageSetupDialog1.ShowDialog();		}		private void btnPrintPreview_Click(object sender, System.EventArgs e)		{			printPreviewDialog1.ShowDialog();		}		private void btnPrint_Click(object sender, System.EventArgs e)		{			if (printDialog1.ShowDialog() == DialogResult.OK)				printDocument1.Print();		}		private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)		{			checkPrint = 0;		}		private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)		{			// Print the content of RichTextBox. Store the last character printed.			checkPrint = richTextBoxPrintCtrl1.Print(checkPrint, richTextBoxPrintCtrl1.TextLength, e);			// Check for more pages			if (checkPrint < richTextBoxPrintCtrl1.TextLength)				e.HasMorePages = true;			else				e.HasMorePages = false;		}
  13. No menu Debug , clique em Iniciar para executar o aplicativo. Form1 é exibida.
  14. Digite algum texto no RichTextBoxPrintCtrl.
  15. Clique em Configurar página para definir as configurações de página.
  16. Clique em Visualizar impressão para exibir a visualização de impressão da página.
  17. Clique em Imprimir para imprimir o conteúdo da RichTextBoxPrintCtrl.
Referências
Para obter informações adicionais, consulte o tópico a seguir na documentação do SDK Microsoft .NET Framework:
Classe RichTextBox
http://msdn2.microsoft.com/en-us/library/system.windows.forms.richtextbox(vs.71).aspx

Aviso: este artigo foi traduzido automaticamente

Propriedades

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

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005 Express Edition

  • kbmt kbprint kbwindowsforms kbinheritance kbctrl kbcontrol kbhowtomaster kbhowto KB812425 KbMtpt
Comentários