Bu adım adım makalede, RichTextBox denetiminin içeriği yazdırmak açıklamaktadır. RichTextBox denetiminin içeriğini yazdırmak için bir yöntem sağlar. Bununla birlikte, EM_FORMATRANGE iletinin kullanılacak RichTextBox sınıfı genişletebilirsiniz. Sonra bir çıktı aygıtına (yazıcı gibi bir RichTextBox içeriğini gönderebilirsiniz.
RichTextBox sınıfını EM_FORMATRANGE RichTextBox denetiminin içeriği yazdırmak için aşağıdaki adımları izleyin:
Yeni bir sınıf oluşturmak için Microsoft Visual Basic .NET'i veya Microsoft Visual Basic 2005 kullanmak RichTextBoxPrintCtrl adlı kitaplığı proje.
Varsayılan olarak, Class1.vb oluşturulur.
Class1.vb dosyasının adı için RichTextBoxPrintCtrl.vb değiştirin.
Solution Explorer'da Başvurular ' ı sağ tıklatın ve Add Reference</a1>'ı tıklatın.
Başvuru Ekle) iletişim kutusunda, System.Drawing.dll ' ı çift tıklatın ve System.Windows.Forms.dll</a5>'ni çift tıklatın.
Başvuruları eklemek için Tamam ' ı tıklatın.
Varolan kod RichTextBoxPrintCtrl.vb silin.
Copy the following code to 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
RichTextBoxPrintCtrl.dll oluşturmak için Oluştur) menüsünde Build Solution ' ı tıklatın.
Denetimi sınamak için <a0></a0>, aşağıdaki adımları izleyin:
Visual Basic .NET veya Visual Basic 2005 kullanarak yeni bir Windows uygulaması) projesi oluşturun.
Varsayılan olarak, Form1.vb oluşturulur.
Araç kutusundan, bir düğme Form1'ın sürükleyin. BtnPageSetup için adını değiştirmek ve Sayfa Yapısı ' na metni değiştirin.
Araç kutusundan başka bir düğme Form1'ın sürükleyin. BtnPrintPreview için adını değiştirin ve Baskı Önizleme ' ye metni değiştirin.
Araç kutusundan başka bir düğme Form1'ın sürükleyin. BtnPrint için adını değiştirin ve yazdırma için metni değiştirin.
Araç, PrintDialog çift tıklatın, PrintPreviewDialog çift tıklatın, PrintDocument çift tıklatın ve sonra PageSetupDialog'un bu denetimler Form1'e eklemek için çift tıklatın.
Belge özelliğinin PrintDialog1, PrintPreviewDialog1 ve PageSetupDialog1PrintDocument1 için değiştirin.
Araçlar menüsünde Özelleştir araç.
.NET Framework bileşenleri ' ni tıklatın, Gözat ' ı tıklatın, RichTextBoxPrintCtrl.dll tıklatıp seçin ve Tamam ' ı tıklatın.
Araç kutusundan RichTextBoxPrintCtrl Form1'ın sürükleyin.
Solution Explorer'da Form1.vb ' ı sağ tıklatın ve Kod Görüntüle</a1>'ı tıklatın.
Sınıf Form1'e aşağıdaki kodu ekleyin:
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
Uygulamayı çalıştırmak için <a0></a0>, Hata Ayıkla menüsünde Başlat ' ı tıklatın.
Metni RichTextBoxPrintCtrl içinde yazın.
Sayfa ayarlarını ayarlamak için <a0></a0>, Sayfa Yapısı ' nı tıklatın.
Sayfanın önizlemesini görmek için Ek Yardım düğmesini tıklatın Baskı Önizleme.
RichTextBoxPrintCtrl içeriğini yazdırmak için Yazdır ' ı tıklatın.
Daha fazla bilgi için Microsoft .NET Framework Software Development Kit'e (SDK) belgelerine veya aşağıdaki MSDN çevrimiçi Yardım Web sitesini ziyaret edin:
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:811401
(http://support.microsoft.com/kb/811401/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.