Συμβουλή συστήματοςΑυτό το άρθρο ισχύει για διαφορετικό λειτουργικό σύστημα από αυτό που χρησιμοποιείτε. Το περιεχόμενο του άρθρου που ενδέχεται να μην σας αφορά έχει απενεργοποιηθεί.
Για την έκδοση αυτού του Microsoft Visual Basic 6.0
το άρθρο, ανατρέξτε στην ενότητα 146022
(http://support.microsoft.com/kb/146022/EN-US/
)
.
Για μια οπτική Microsoft C#.NET έκδοση αυτού του άρθρου, ανατρέξτε στο θέμα 812425
(http://support.microsoft.com/kb/812425/
)
.
Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο εκτύπωσης του περιεχομένου
από μια RichTextBox στοιχείο ελέγχου. Το RichTextBox στοιχείο ελέγχου παρέχουν μια μέθοδο για να εκτυπώσετε το περιεχόμενό του. Ωστόσο,
Μπορείτε να επεκτείνετε το RichTextBox Κλάση για να χρησιμοποιήσετε το μήνυμα EM_FORMATRANGE. Μπορείτε να στείλετε το
περιεκτικότητα σε RichTextBox σε μια συσκευή εξόδου, όπως ένας εκτυπωτής.
Δημιουργία ενός στοιχείου ελέγχου RichTextBoxPrintCtrl
Για να επεκτείνετε το RichTextBox Κλάση και χρησιμοποιήστε το EM_FORMATRANGE για να εκτυπώσετε το περιεχόμενο του RichTextBox τον έλεγχο, ακολουθήστε τα εξής βήματα:
Χρήση της Microsoft Visual Basic.NET ή 2005 Microsoft Visual Basic για να δημιουργήσετε μια νέα κλάση
Βιβλιοθήκη έργο με όνομα RichTextBoxPrintCtrl.
Από
προεπιλογή, δημιουργείται Class1.vb.
Αλλάξτε το όνομα του αρχείου Class1.vbRichTextBoxPrintCtrl.vb.
Στην Εξερεύνηση λύση, κάντε δεξιό κλικΑναφορές, και στη συνέχεια κάντε κλικ στο κουμπί Προσθήκη
Αναφορά.
Με το Προσθήκη αναφοράς στο παράθυρο διαλόγου, κάντε διπλό κλικ System.Drawing.dll, και
Κάντε διπλό κλικ System.Windows.Forms.dll.
Για να προσθέσετε αναφορές, κάντε κλικ στο κουμπί OK.
Διαγράψτε τον υπάρχοντα κώδικαRichTextBoxPrintCtrl.vb.
Αντιγράψτε τον παρακάτω κώδικα στο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, κάντε κλικ στο κουμπίΔόμηση λύσεων από το Δόμηση μενού.
Για να ελέγξετε το στοιχείο ελέγχου, ακολουθήστε τα εξής βήματα:
Δημιουργήστε ένα νέο έργο εφαρμογών των Windows χρησιμοποιώντας το Visual
Βασικό.NET ή 2005 Visual Basic.
Από προεπιλογή, δημιουργείται Form1.vb.
Από την εργαλειοθήκη, σύρετε ένα κουμπί Form1. Αλλάξτε το όνομα
Για να btnPageSetup, και να αλλάξετε το κείμενο Σελίδα
Το πρόγραμμα εγκατάστασης.
Από την εργαλειοθήκη, σύρετε ένα άλλο κουμπί Form1. Αλλαγή
το όνομα btnPrintPreview, και να αλλάξετε το κείμενοΠροεπισκόπηση εκτύπωσης.
Από την εργαλειοθήκη, σύρετε ένα άλλο κουμπί Form1. Αλλαγή
το όνομα btnPrint, και να αλλάξετε το κείμενοΕκτύπωση.
Στην εργαλειοθήκη, κάντε διπλό κλικ PrintDialog,
Κάντε διπλό κλικ PrintPreviewDialog, κάντε διπλό κλικPrintDocument, και στη συνέχεια κάντε διπλό κλικPageSetupDialog Για να προσθέσετε αυτά τα στοιχεία ελέγχου Form1.
Τροποποίηση του Το έγγραφο ιδιότητα PrintDialog1,PrintPreviewDialog1, και PageSetupDialog1 Για ναPrintDocument1.
Από το Εργαλεία μενού, κάντε κλικ στο κουμπί Προσαρμογή
Εργαλειοθήκη.
Κάντε κλικ στο κουμπί .NET Framework στοιχεία, κάντε κλικ στο κουμπίΑναζήτηση, κάντε κλικ στην επιλογήRichTextBoxPrintCtrl.dll, και στη συνέχεια κάντε κλικ στο κουμπίOK.
Από την εργαλειοθήκη, σύρετεRichTextBoxPrintCtrl σε Form1.
Στην Εξερεύνηση λύση, κάντε δεξιό κλικForm1.VB, και στη συνέχεια κάντε κλικ στο κουμπί Προβολή
Κώδικα.
Προσθέστε τον ακόλουθο κώδικα κλάσης 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
Για να εκτελέσετε την εφαρμογή, κάντε κλικ στο κουμπί Έναρξη από τοΟ εντοπισμός σφαλμάτων μενού.
Πληκτρολογήστε κείμενο στοRichTextBoxPrintCtrl.
Για να ορίσετε τις ρυθμίσεις σελίδας, κάντε κλικ στο κουμπί Σελίδα
Το πρόγραμμα εγκατάστασης.
Για να δείτε μια προεπισκόπηση της σελίδας, κάντε κλικ στο κουμπί Εκτύπωση
Προεπισκόπηση.
Για να εκτυπώσετε το περιεχόμενο τουRichTextBoxPrintCtrl, κάντε κλικ στο κουμπί Εκτύπωση.
Για περισσότερες πληροφορίες, επισκεφθείτε την τοποθεσία της Microsoft.NET Framework
Λογισμικό Development Kit (SDK) τεκμηρίωση ή την ηλεκτρονική Βοήθεια των παρακάτω MSDN
Τοποθεσία στο Web:
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:811401
(http://support.microsoft.com/kb/811401/en-us/
)
Πόση προσπάθεια καταβάλλατε για να χρησιμοποιήσετε αυτό το άρθρο;
Πολύ λίγη
Λίγη
Μέτρια
Μεγάλη
Πολύ μεγάλη
Πείτε μας για ποιον λόγο και με ποιον τρόπο θα μπορούσαμε να βελτιώσουμε αυτές τις πληροφορίες
Σας ευχαριστούμε! Τα σχόλιά σας θα μας βοηθήσουν να βελτιώσουμε το περιεχόμενο υποστήριξης. Για περισσότερες επιλογές βοήθειας, επισκεφτείτε την αρχική σελίδα της Βοήθειας και υποστήριξης.