Cara mengatur kontrol RichTextBox untuk pencetakan WYSIWYG

PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.

Klik disini untuk melihat versi Inggris dari artikel ini:146022
Artikel ini telah diarsipkan. Artikel ditawarkan dalam bentuk "apa adanya" dan tidak akan dapat diperbarui lagi.
RINGKASAN
Metode SelPrint RichTextBox kontrol tidak mengizinkan seorang programmeruntuk mengatur posisi output pada printer. Selain itu,RichTextBox kontrol tidak menyediakan metode untuk menampilkan isinyaseperti mereka akan muncul pada printer. Artikel ini menjelaskan cara untuk mengaturRichTextBox dengan tampilan WYSIWYG (apa Anda lihat adalah apa yang Anda Dapatkan) dan kemudianbagaimana untuk mencetak.
INFORMASI LEBIH LANJUT
Kontrol Visual Basic RichTextBox adalah kontrol sub-classed yang didasarkan padaRichTextBox disediakan oleh sistem operasi Win32. Operasisistem kontrol mendukung banyak pesan yang tidak terekspos pada Visual Basic.Salah satu pesan ini adalah EM_SETTARGETDEVICE. EM_SETTARGETDEVICEpesan digunakan untuk memberitahu RichTextBox untuk tampilan yang berdasarkan targetperangkat seperti printer. Pesan lain yang tidak sepenuhnya terkena olehVisual Basic adalah EM_FORMATRANGE. Pesan EM_FORMATRANGE mengirim halamanpada suatu waktu untuk perangkat output menggunakan koordinat tertentu. Menggunakan inipesan dalam Visual Basic, mungkin untuk membuat RichTextBox dukunganTampilan WYSIWYG dan output.

Contoh berikut menggambarkan cara untuk mengambil keuntungan dariEM_SETTARGETDEVICE dan EM_FORMATRANGE pesan dari Visual Basic. Thecontoh menyediakan dua kembali prosedur untuk mengirim pesan ini. Pertamaprosedur WYSIWYG_RTF() set RichTextBox untuk memberikan tampilan WYSIWYGberdasarkan default printer dan ditentukan margin. Prosedur keduaPrintRtf() cetakan isi RichTextBox dengan yang ditentukanmargin.

CONTOH

  1. Memulai sebuah proyek baru dalam Visual Basic 32-bit edition. Form1 dibuat secara default.
  2. Menempatkan CommandButton dan RichTextBox kontrol pada Form1.
  3. Tambahkan kode berikut untuk Form1:
    Private Const AnInch As Long = 1440   '1440 twips per inchPrivate Const QuarterInch As Long = 360Private Sub Form_Load()   Dim PrintableWidth As Long   Dim PrintableHeight As Long   Dim x As Single   ' Initialize Form and Command button   Me.Caption = "Rich Text Box WYSIWYG Printing Example"   Command1.Move 10, 10, 600, 380   Command1.Caption = "&Print"   ' Set the font of the RTF to a TrueType font for best results   RichTextBox1.SelFontName = "Arial"   RichTextBox1.SelFontSize = 10      'initialize the printer object   x = Printer.TwipsPerPixelX   Printer.Orientation = vbPRORPortrait  'vbPRORLandscape   ' Tell the RTF to base it's display off of the printer   Call WYSIWYG_RTF(RichTextBox1, QuarterInch, QuarterInch, QuarterInch, QuarterInch, PrintableWidth, PrintableHeight) '1440 Twips=1 Inch   ' Set the form width to match the line width   Me.Width = PrintableWidth + 200   Me.Height = PrintableHeight + 800End SubPrivate Sub Form_Resize()   ' Position the RTF on form   RichTextBox1.Move 100, 500, Me.ScaleWidth - 200, Me.ScaleHeight - 600End SubPrivate Sub Command1_Click()   ' Print the contents of the RichTextBox with a one inch margin   PrintRTF RichTextBox1, AnInch, AnInch, AnInch, AnInchEnd Sub					
  4. Masukkan modul standar baru ke dalam proyek, Module1.bas dibuat oleh default.
  5. Tambahkan kode berikut untuk Module1:
    Option ExplicitPrivate Type Rect   Left As Long   Top As Long   Right As Long   Bottom As LongEnd TypePrivate Type CharRange  cpMin As Long     ' First character of range (0 for start of doc)  cpMax As Long     ' Last character of range (-1 for end of doc)End TypePrivate Type FormatRange  hdc As Long       ' Actual DC to draw on  hdcTarget As Long ' Target DC for determining text formatting  rc As Rect        ' Region of the DC to draw to (in twips)  rcPage As Rect    ' Region of the entire DC (page size) (in twips)  chrg As CharRange ' Range of text to draw (see above declaration)End TypePrivate Const WM_USER As Long = &H400Private Const EM_FORMATRANGE As Long = WM_USER + 57Private Const EM_SETTARGETDEVICE As Long = WM_USER + 72Private Const PHYSICALOFFSETX As Long = 112Private Const PHYSICALOFFSETY As Long = 113Private Declare Function GetDeviceCaps Lib "gdi32" ( _   ByVal hdc As Long, ByVal nIndex As Long) As LongPrivate Declare Function SendMessage Lib "USER32" Alias "SendMessageA" _   (ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, _   lp As Any) As LongPrivate Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" _   (ByVal lpDriverName As String, ByVal lpDeviceName As String, _   ByVal lpOutput As Long, ByVal lpInitData As Long) As Long'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' WYSIWYG_RTF - Sets an RTF control to display itself the same as it'               would print on the default printer'' RTF - A RichTextBox control to set for WYSIWYG display.'' LeftMarginWidth - Width of desired left margin in twips'' RightMarginWidth - Width of desired right margin in twips'' Returns - The length of a line on the printer in twips'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Public Sub WYSIWYG_RTF(RTF As RichTextBox, LeftMarginWidth As Long, RightMarginWidth As Long, TopMarginWidth As Long, BottomMarginWidth As Long, PrintableWidth As Long, PrintableHeight As Long)   Dim LeftOffset As Long   Dim LeftMargin As Long   Dim RightMargin As Long   Dim TopOffset As Long   Dim TopMargin As Long   Dim BottomMargin As Long   Dim PrinterhDC As Long   Dim r As Long   Printer.ScaleMode = vbTwips      ' Get the left offset to the printable area on the page in twips   LeftOffset = GetDeviceCaps(Printer.hdc, PHYSICALOFFSETX)   LeftOffset = Printer.ScaleX(LeftOffset, vbPixels, vbTwips)      ' Calculate the Left, and Right margins   LeftMargin = LeftMarginWidth - LeftOffset   RightMargin = (Printer.Width - RightMarginWidth) - LeftOffset      ' Calculate the line width   PrintableWidth = RightMargin - LeftMargin      ' Get the top offset to the printable area on the page in twips   TopOffset = GetDeviceCaps(Printer.hdc, PHYSICALOFFSETY)   TopOffset = Printer.ScaleX(TopOffset, vbPixels, vbTwips)      ' Calculate the Left, and Right margins   TopMargin = TopMarginWidth - TopOffset   BottomMargin = (Printer.Height - BottomMarginWidth) - TopOffset      ' Calculate the line width   PrintableHeight = BottomMargin - TopMargin          ' Create an hDC on the Printer pointed to by the Printer object   ' This DC needs to remain for the RTF to keep up the WYSIWYG display   PrinterhDC = CreateDC(Printer.DriverName, Printer.DeviceName, 0, 0)   ' Tell the RTF to base it's display off of the printer   '    at the desired line width   r = SendMessage(RTF.hWnd, EM_SETTARGETDEVICE, PrinterhDC, _      ByVal PrintableWidth)End Sub'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' PrintRTF - Prints the contents of a RichTextBox control using the'            provided margins'' RTF - A RichTextBox control to print'' LeftMarginWidth - Width of desired left margin in twips'' TopMarginHeight - Height of desired top margin in twips'' RightMarginWidth - Width of desired right margin in twips'' BottomMarginHeight - Height of desired bottom margin in twips'' Notes - If you are also using WYSIWYG_RTF() on the provided RTF'         parameter you should specify the same LeftMarginWidth and'         RightMarginWidth that you used to call WYSIWYG_RTF()''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Public Sub PrintRTF(RTF As RichTextBox, LeftMarginWidth As Long, _   TopMarginHeight, RightMarginWidth, BottomMarginHeight)   Dim LeftOffset As Long, TopOffset As Long   Dim LeftMargin As Long, TopMargin As Long   Dim RightMargin As Long, BottomMargin As Long   Dim fr As FormatRange   Dim rcDrawTo As Rect   Dim rcPage As Rect   Dim TextLength As Long   Dim NextCharPosition As Long   Dim r As Long   ' Start a print job to get a valid Printer.hDC   Printer.Print Space(1)   Printer.ScaleMode = vbTwips   ' Get the offsett to the printable area on the page in twips   LeftOffset = Printer.ScaleX(GetDeviceCaps(Printer.hdc, _      PHYSICALOFFSETX), vbPixels, vbTwips)   TopOffset = Printer.ScaleY(GetDeviceCaps(Printer.hdc, _      PHYSICALOFFSETY), vbPixels, vbTwips)   ' Calculate the Left, Top, Right, and Bottom margins   LeftMargin = LeftMarginWidth - LeftOffset   TopMargin = TopMarginHeight - TopOffset   RightMargin = (Printer.Width - RightMarginWidth) - LeftOffset   BottomMargin = (Printer.Height - BottomMarginHeight) - TopOffset   ' Set printable area rect   rcPage.Left = 0   rcPage.Top = 0   rcPage.Right = Printer.ScaleWidth   rcPage.Bottom = Printer.ScaleHeight   ' Set rect in which to print (relative to printable area)   rcDrawTo.Left = LeftMargin   rcDrawTo.Top = TopMargin   rcDrawTo.Right = RightMargin   rcDrawTo.Bottom = BottomMargin   ' Set up the print instructions   fr.hdc = Printer.hdc   ' Use the same DC for measuring and rendering   fr.hdcTarget = Printer.hdc  ' Point at printer hDC   fr.rc = rcDrawTo            ' Indicate the area on page to draw to   fr.rcPage = rcPage          ' Indicate entire size of page   fr.chrg.cpMin = 0           ' Indicate start of text through   fr.chrg.cpMax = -1          ' end of the text   ' Get length of text in RTF   TextLength = Len(RTF.Text)   ' Loop printing each page until done   Do      ' Print the page by sending EM_FORMATRANGE message      NextCharPosition = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)      If NextCharPosition >= TextLength Then Exit Do  'If done then exit      fr.chrg.cpMin = NextCharPosition ' Starting position for next page      Printer.NewPage                  ' Move on to next page      Printer.Print Space(1) ' Re-initialize hDC      fr.hdc = Printer.hdc      fr.hdcTarget = Printer.hdc   Loop   ' Commit the print job   Printer.EndDoc   ' Allow the RTF to free up memory   r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))End Sub					
  6. Menyimpan proyek.
  7. Menjalankan proyek.
  8. Masukkan atau menyisipkan beberapa teks ke dalam RichTextBox.
  9. Tekan tombol perintah Print. Perhatikan bahwa output dicetak harus kata-bungkus di lokasi yang sama seperti yang ditampilkan pada layar. Juga, output harus dicetak dengan margin tertentu yang di sekitar satu inci.

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 146022 - Tinjauan Terakhir: 12/04/2015 14:07:42 - Revisi: 2.0

Microsoft Visual Basic 5.0 Learning Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition

  • kbnosurvey kbarchive kbhowto kbprint kbtophit kbmt KB146022 KbMtid
Tanggapan