Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Mark

Проблема с RichTextBox под Windows 2000 или Windows XP

20.12.2009, 17:22. Показов 1679. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код , который прекрасно работает под Windows 98 .
На Picture1 приклеевается RichTextBox и отпечатывается Picture1 .

-----------------------------------------------------------------------------------------------------------
Option Explicit

Private Declare Function SendMessage Lib 'user32' Alias _
'SendMessageA' (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const WM_PAINT = &HF
Private Const WM_PRINT = &H317
Private Const PRF_CLIENT = &H4& ' Draw the window's client area
Private Const PRF_CHILDREN = &H10& ' Draw all visible child
Private Const PRF_OWNED = &H20& ' Draw all owned windows

Private Sub Command1_Click()
RichTextBox1.OLEObjects.Add , , 'c:windows riangles.bmp'

Picture1.SetFocus
Picture1.AutoRedraw = True
rv = SendMessage(Picture1.hwnd, WM_PAINT, Picture1.hDC, 0)
rv = SendMessage(Picture1.hwnd, WM_PRINT, Picture1.hDC, _
PRF_CHILDREN + PRF_CLIENT + PRF_OWNED)
Picture1.Picture = Picture1.Image
Picture1.AutoRedraw = False

Printer.PaintPicture Picture1.Image, 1, 1
Printer.EndDoc
End Sub
-----------------------------------------------------------------------------------------------------------
Но при переходе под Windows 2000 или Windows XP код почему-то не работает.
RichTextBox не появляется на Picture1.
Может кто-то сталкивался с этой проблемой.
Или знает как по-другому отпечатать отредактированный RichTextBox.
Заранее спасибо.
Марк. mark_str@km.ru
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2009, 17:22
Ответы с готовыми решениями:

Хочу сделать программу невидимой для Windows XP или Windows 2000 или Windows NT
Ya hochu sdelat` programu nevidimuyu na Windows XP ili Windows 2000 ili Windows NT Nashel funkciu dlya Windows 9x, amne nuzno dlya vise...

Windows 2000 Prof: не работает прога под Windows 95/98
Подскажите, плз, как это дело побороть (а может сразу - в морг?)... Ругается на msvcrt.dll. Заменял длл-ку от 98-го - не помогло :( Есть...

Как установить Windows 2000 Или Windows nt Через флешку
Как установить Windows 2000 Или Windows nt Через флешку!У меня нетбук и нет дисковода!

2
0 / 0 / 0
Регистрация: 21.10.2006
Сообщений: 7
03.01.2010, 23:35
'Честно сознаюсь - основная идея не моя - нарыл где-то в Internet, а вот аранжировка - моя...

Option Explicit

'Примечание: Microsoft RichTextBox обеспечивает печать самого себя
'с помощью метода .SelPrint.
'К сожалению, данный метод не позволяет никоим образом вмешаться
'в процесс, например для печати на загловков страницы или установки
'отступов от края листа. Данный пример решает эту проблему,
'т.к. теперь Вы имеете полный контроль над процессом печати.

Private Const mFontName As String = 'Courier New Cyr'
Private Const cTvip As Single = 56.7 'Твипов на мм
Private bStopRtfPrint As Boolean 'Тормозим печать
Private bError As Boolean 'Ошибка печати

Public Type SIZE
cx As Long
cy As Long
End Type

Public Type RECT
left As Long
top As Long
right As Long
bottom As Long
End Type

Public 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 Type

Public 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 Type

Public Const LOGPIXELSX = 88
Public Const LOGPIXELSY = 90
Public Const PHYSICALOFFSETX As Long = 112
Public Const PHYSICALOFFSETY As Long = 113

Public Const WM_USER As Long = &H400
Public Const EM_FORMATRANGE As Long = WM_USER + 57

'' DrawText() Format Flags
Public Const DT_TOP = &H0
Public Const DT_LEFT = &H0
Public Const DT_CENTER = &H1
Public Const DT_RIGHT = &H2
Public Const DT_VCENTER = &H4
Public Const DT_BOTTOM = &H8
Public Const DT_WORDBREAK = &H10
Public Const DT_SINGLELINE = &H20
Public Const DT_EXPANDTABS = &H40
Public Const DT_TABSTOP = &H80
Public Const DT_NOCLIP = &H100
Public Const DT_EXTERNALLEADING = &H200
Public Const DT_CALCRECT = &H400
Public Const DT_NOPREFIX = &H800
Public Const DT_INTERNAL = &H1000
'------------

'Declare Sub InflateRect Lib 'user' (lpRect As RECT, ByVal X%, ByVal Y%)
Declare Sub InflateRect Lib 'user32' (lpRect As RECT, ByVal X%, ByVal Y%)
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)
Declare Function GetDeviceCaps Lib 'gdi32' (ByVal hDC As Long, ByVal nIndex As Long) As Long
Declare Function SendMessage Lib 'user32' Alias 'SendMessageA' (ByVal hwnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As Long

'--------- Печать текста RTF -------------
Public Sub PrintRTF(RTF As RichTextBox, Optional ByVal LeftMarginWidth As Long = 20, Optional ByVal TopMarginHeight As Long = 10, Optional ByVal RightMarginWidth As Long = 10, Optional ByVal BottomMarginHeight As Long = 10, Optional ByVal bPagesAll As Boolean = True, Optional ByVal lPagesNum As Long = 1)
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, rcPage As RECT
Dim TextLength As Long, NextCharPos As Long
Dim lPagesCounter As Long 'Число напечатанных страниц
lPagesCounter = 0

MmToTwip LeftMarginWidth, TopMarginHeight, RightMarginWidth, BottomMarginHeight 'переводим из мм ttomMargin As Long
Dim fr As FormatRange
Dim rcDrawTo As RECT
Dim rcPage As RECT
Dim NextCharPos As Long

'переводим из мм в Твипы ----------
MmToTwip LeftMarginWidth, TopMarginHeight, RightMarginWidth, BottomMarginHeight
'--------------------------------------
bStopRtfPrint = False


oOut.ScaleMode = vbTwips
NextCharPos = 0

' Get the offsett to the printable area on the page in twips
LeftOffset = GetDeviceCaps(oOut.hDC, PHYSICALOFFSETX) / GetDeviceCaps(oOut.hDC, LOGPIXELSX) * 1440
TopOffset = GetDeviceCaps(oOut.hDC, PHYSICALOFFSETY) / GetDeviceCaps(oOut.hDC, LOGPIXELSY) * 1440


' Calculate the Left, Top, Right, and Bottom margins
LeftMargin = LeftMarginWidth - LeftOffset
TopMargin = TopMarginHeight - TopOffset
RightMargin = (oOut.Width - RightMarginWidth) - LeftOffset
BottomMargin = (oOut.Height - BottomMarginHeight) - TopOffset

rcPage.left = 0
rcPage.top = 0
rcPage.right = oOut.ScaleWidth
rcPage.bottom = oOut.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 = oOut.hDC ' Use the same DC for measuring and rendering
fr.hdcTarget = oOut.hDC ' Point at oOut hDC
'fr.chrg.cpMin = NextCharPos ' Indicate start of text through
fr.chrg.cpMin = 0 ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
fr.rc = rcDrawTo ' Indicate the area on page to draw to
fr.rcPage = rcPage ' Indicate entire size of page

'oOut.FontSize = 6
oOut.Print Space(1); ' Re-initialize hDC

'NextCharPos = SendMessage(RTF.hwnd, EM_FORMATRANGE, True, fr) ' Print the page by sending EM_FORMATRANGE message
SendMessage RTF.hwnd, EM_FORMATRANGE, True, fr ' Print the page by sending EM_FORMATRANGE message
'Debug.Print 'OUT EM_FORMATRANGE'; EM_FORMATRANGE
DoEvents
SendMessage RTF.hwnd, EM_FORMATRANGE, False, ByVal CLng(0) 'Похоже восстанавливает исходный RTF
Exit Sub
OutRTFSingleBad:
bError = True
End Sub

'----------- Нет ошибок принтера -----------
Public Sub PrintErrorNo()
bError = False
End Sub

Public Function PrintError() As Boolean
PrintError = bError
End Function

'------ Печать одной страницы без перевода листа -----------
Public Sub PrintRTFSingle(RTF As RichTextBox, Optional ByVal LeftMarginWidth As Long = 20, Optional ByVal TopMarginHeight As Long = 10, Optional ByVal RightMarginWidth As Long = 10, Optional ByVal BottomMarginHeight As Long = 10)
On Error GoTo PrintRTFSingleBad:
Dim LeftOffset As Long
Dim TopOffset As Long
Dim LeftMargin As Long
Dim TopMargin As Long
Dim RightMargin As Long
Dim BottomMargin As Long
Dim fr As FormatRange
Dim rcDrawTo As RECT
Dim rcPage As RECT
'Dim TextLength As Long
Dim NextCharPos As Long
'Dim lPagesCounter As Long 'Число напечатанных страниц
'lPagesCounter = 0

'переводим из мм в Твипы ----------
LeftMarginWidth = LeftMarginWidth * cTvip
TopMarginHeight = TopMarginHeight * cTvip
RightMarginWidth = RightMarginWidth * cTvip
BottomMarginHeight = BottomMarginHeight * cTvip
'MmToTwip LeftMarginWidth, TopMarginHeight, RightMarginWidth, BottomMarginHeight
'--------------------------------------

bStopRtfPrint = False

NextCharPos = 0
Printer.ScaleMode = vbTwips
<BR
0
0 / 0 / 0
Регистрация: 21.10.2006
Сообщений: 7
03.01.2010, 23:41
P&S Совсем забыл... Приведенный выше метод печати к сожалению почему-то не всегда 'дружит' с принтерами подключенными к сети через собственную сетевую плату (т.е без компьютера). С чем это связано и как бороться я так и не понял..
Если кто разберется - напишите ....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.01.2010, 23:41
Помогаю со студенческими работами здесь

Проблемма с установкой Perl под Веб сервер для IIS под Windows 2000 Professional
Помогите с установкой Perl под Веб сервер для IIS под Windows 2000 Professional Мои действия 1.Установил...

Как запустить asp-страницы, разработанные под PWS и Win98, под Windows 2000 Server?
Как запустить asp-страницы, разработанные под PWS и Win98, под Windows 2000 Server! Есть там встроенный Web-сервер? Какое программное...

Проблема после установки Windows 2000 !!!
Может мне помочь в следующей проблеме: Обновил на своем PC OS (Windows98 на Windows2000), установил заново VB, MSDN, и т.д. Запускаю...

Сеть под Windows 2000
привет всем... вот такой вопрос. на машине имеется 2 сетевых интерфейса... на одном из них локалка - 192.168.0.0/255.255.255.0 - 1...

Эмуляция стиля Windows XP или Windows 7 под восьмеркой
Добрый день! Подскажите, пожалуйста, есть ли под Window 8 способ сэмулировать интерфейсы программ как Windows XP или 7? Имеется в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru