Visual Basic.Net
Вторник, 15.07.2025, 18:12
Меню сайта

Категории каталога
Visual Basic.NET [9]
Visual Basic 6.0 [17]
VBA [13]
VBScript [1]

Форма входа

Поиск

Друзья сайта
Создайте свой сайт Все для веб-мастера Программы для всех Мир развлечений WOlist.ru - каталог качественных сайтов Рунета

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Наш опрос
Оцените мой сайт
1. Отлично
2. Неплохо
3. Хорошо
4. Плохо
5. Ужасно
Всего ответов: 23

Главная » Статьи » Программирование на Visual Basic » Visual Basic 6.0

Как напечатать текст из RichTextBox, с форматированием?
Форма:
Option Explicit

Private Sub Command1_Click()
PrintRTF RichTextBox1, 1440, 1440, 1440, 1440
End Sub

Модуль:
Option Explicit
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type CharRange
cpMin As Long
cpMax As Long
End Type
Private Type FormatRange
hDC As Long
hdcTarget As Long
rc As RECT
rcPage As RECT
chrg As CharRange
End Type
Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY = 90
Private Const PHYSICALOFFSETX As Long = 112
Private Const PHYSICALOFFSETY As Long = 113
Private Const WM_USER As Long = &H400
Private Const EM_FORMATRANGE As Long = WM_USER + 57
Private Declare Function GetDeviceCaps Lib "gdi32" _
  (ByVal hDC As Long, ByVal nIndex As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  (ByVal hwnd As Long, _
  ByVal msg As Long, _
  ByVal wp As Long, _
  lp As Any) As Long

Public Declare Function DrawText Lib "user32" Alias "DrawTextA" _
  (ByVal hDC As Long, _
  ByVal lpStr As String, _
  ByVal nCount As Long, _
  lpRect As RECT, _
  ByVal wFormat As Long) As Long

Public Sub PrintRTF(rtf As RichTextBox, LeftMarginWidth As Long, _
  TopMarginHeight, RightMarginWidth, BottomMarginHeight, Optional Text$)
Dim LeftOffset&, TopOffset&, LeftMargin&, TopMargin&
Dim RightMargin&, BottomMargin&
Dim rcDrawTo As RECT, rcPage As RECT
Dim TextLength&, NextCharPos&
Dim fr As FormatRange, Page&, tmp$

NextCharPos = 0
Page = 1
Printer.ScaleMode = vbTwips
LeftOffset = GetDeviceCaps(Printer.hDC, PHYSICALOFFSETX) / _
  GetDeviceCaps(Printer.hDC, LOGPIXELSX) * 1440
TopOffset = GetDeviceCaps(Printer.hDC, PHYSICALOFFSETY) / _
  GetDeviceCaps(Printer.hDC, LOGPIXELSY) * 1440
LeftMargin = LeftMarginWidth - LeftOffset
TopMargin = TopMarginHeight - TopOffset
RightMargin = (Printer.Width - RightMarginWidth) - LeftOffset
BottomMargin = (Printer.Height - BottomMarginHeight) - TopOffset
rcPage.Left = 0
rcPage.Top = 0
rcPage.Right = Printer.ScaleWidth
rcPage.Bottom = Printer.ScaleHeight
rcDrawTo.Left = LeftMargin
rcDrawTo.Top = TopMargin
rcDrawTo.Right = RightMargin
rcDrawTo.Bottom = BottomMargin
TextLength = Len(rtf.Text)
Do
fr.hDC = Printer.hDC
fr.hdcTarget = Printer.hDC
fr.chrg.cpMin = NextCharPos
fr.chrg.cpMax = -1
fr.rc = rcDrawTo
fr.rcPage = rcPage
Printer.Print Space(1)
tmp = "Печатаем из RichTextBox: " & Text
DrawText Printer.hDC, tmp, Len(tmp), MakeRect(10, 10, Printer.Width, 700), 0
tmp = Chr$(32) & Page
DrawText Printer.hDC, tmp, Len(tmp), MakeRect(Printer.Width / _
  Printer.TwipsPerPixelX - Printer.TextWidth(tmp), 10, Printer.Width, 700), 0
NextCharPos = SendMessage(rtf.hwnd, EM_FORMATRANGE, True, fr)
If NextCharPos < = 0 Or NextCharPos >= TextLength Then Exit Do
Printer.NewPage
Page = Page + 1
Loop
Printer.EndDoc
SendMessage rtf.hwnd, EM_FORMATRANGE, False, ByVal CLng(0)
End Sub

Public Function MakeRect(Left&, Top&, Right&, Bottom&) As RECT
With MakeRect
 .Bottom = Bottom
 .Left = Left
 .Right = Right
 .Top = Top
End With
End Function

Категория: Visual Basic 6.0 | Добавил: Vadim (11.01.2009)
Просмотров: 2109 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2025
Бесплатный конструктор сайтовuCoz