Страница: 1 |
Вопрос: Как работать с принтером??? | Добавлено: 08.01.04 07:46 |
Автор вопроса: ![]() |
Ребята, как работать с принтером и VB?
может кто-то FAQ подкинет, или что-нибудь похожее. Мне нужно некоторые данные текстовых полей по нажатию на клавишу распечатать. Не знаю как. Может для него есть какой-то компонент? |
Ответы | Всего ответов: 12 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 08.01.04 08:07 |
Для этого есть стандартный объект Printer |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Разработчик Offline Client ICQ: 204034 Вопросов: 106 Ответов: 1919 |
Профиль | Цитата | #2 | Добавлено: 08.01.04 08:38 |
Printer.Font ... Printer.Print (стандартный комбобокс не выдает этого параметра) Обязательно пиши Printer.EndDoc Или возьми мой код из Библиотеки кодов. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() Разработчик Offline Client ICQ: 204034 Вопросов: 106 Ответов: 1919 |
Профиль | Цитата | #3 | Добавлено: 08.01.04 08:57 |
Правда там подглюченная версия - я могу выслать новую и работающую. |
Номер ответа: 4 Автор ответа: ![]() ![]() Вопросов: 2 Ответов: 1 |
Профиль | Цитата | #4 | Добавлено: 08.01.04 12:56 |
Если не влом, то и мне вышли mailto:vyrus@smtp.ru |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 201502381 Вопросов: 15 Ответов: 737 |
Профиль | Цитата | #5 | Добавлено: 08.01.04 19:07 |
To Александр: Намыль мне (alex@vbnet.ru). Я выложу новую версию. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() Разработчик Offline Client ICQ: 204034 Вопросов: 106 Ответов: 1919 |
Профиль | Цитата | #6 | Добавлено: 08.01.04 19:49 |
Выслал. |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 22 Ответов: 25 |
Профиль | Цитата | #7 | Добавлено: 09.01.04 17:28 |
Мне тоже вышлите, плиззз. Даю адресс woolfik@ua.fm |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() Разработчик Offline Client ICQ: 204034 Вопросов: 106 Ответов: 1919 |
Профиль | Цитата | #8 | Добавлено: 09.01.04 20:15 |
Зачем? Он скоро появится на этом сайте. Я послал Алексу. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() Разработчик Offline Client ICQ: 204034 Вопросов: 106 Ответов: 1919 |
Профиль | Цитата | #9 | Добавлено: 10.01.04 12:10 |
Если не появится, то конечно вышлю... Только напишите на astreix555@yandex.ru, а то забуду... |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() Разработчик Offline Client ICQ: 204034 Вопросов: 106 Ответов: 1919 |
Профиль | Цитата | #10 | Добавлено: 12.01.04 17:52 |
cracoff(c): 1. SavePicture сохраняет BMP-файлы 2. а) заполняем листбокс доступными принтерами For Each Prin In Printers List1.AddItem Prin.DeviceName Next б) выбираем принтер For Each X In Printers If List1.TEXT = X.DeviceName Then Set Printer = X End If Next X в) печатаем на выбраном принтере Printer.PaintPicture ... Printer.EndDoc г) все. 3. Попробуй настроить FillStyle у пикчубокса 4. Можно. Есть много методов. Самый универсальный - перехватывать сообщения. Читай статью про это на этом сайте. http://vbnet.ru/article/showarticle.asp?id=76 И еще - покопайся в константах принтера VB (начинаются на vbPR..). Таким способом я построил весьма реальный модуль печати... Может выложу на этот сайт... |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() Разработчик Offline Client ICQ: 204034 Вопросов: 106 Ответов: 1919 |
Профиль | Цитата | #11 | Добавлено: 12.01.04 17:57 |
ВОТ... 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 'переводим из мм в Твипы ---------- bStopRtfPrint = False NextCharPos = 0 Printer.ScaleMode = vbTwips ' Get the offsett to the printable area on the page in twips LeftOffset = GetDeviceCaps(Printer.hDC, PHYSICALOFFSETX) / GetDeviceCaps(Printer.hDC, LOGPIXELSX) * 1440 TopOffset = GetDeviceCaps(Printer.hDC, PHYSICALOFFSETY) / GetDeviceCaps(Printer.hDC, LOGPIXELSY) * 1440 ' 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 ' Get length of text in RTF TextLength = Len(RTF.Text) ' Loop printing each page until done Do ' 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.chrg.cpMin = NextCharPos ' 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 Printer.Print Space(1) ' Re-initialize hDC ' Print the page by sending EM_FORMATRANGE message 'NextCharPosition = SendMessage(rtf.hwnd, EM_FORMATRANGE, True, fr) NextCharPos = SendMessage(RTF.hwnd, EM_FORMATRANGE, True, fr) 'DoEvents If NextCharPos <= 0 Or NextCharPos >= TextLength Then Exit Do 'If done then exit DoEvents If bStopRtfPrint = True Then 'Тормозим печать GoTo PrintRtfEnd: End If If bPagesAll = False Then 'Если задано число страниц с 1 по lPagesNum lPagesCounter = lPagesCounter + 1 If lPagesCounter >= lPagesNum Then Exit Do 'GoTo PrintRtfEnd: End If End If Printer.NewPage ' Move on to next page Loop ' Commit the print job PrintRtfEnd: Printer.EndDoc ' Allow the RTF to free up memory SendMessage RTF.hwnd, EM_FORMATRANGE, False, ByVal CLng(0) End Sub '-------------------------------------------------------------------------------- 'Использование: ' Напечатать содержимое RichTextBox'a с отступами в 1 дюйм (1440 twips) от края листа 'PrintRTF RichTextBox1, 1440, 1440, 1440, 1440 'Как показала практика этлт метод печати иногда "взбрыкивает" при печати на сетевые принтеры, которые самостоятельно подключены к сети.. |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() Разработчик Offline Client ICQ: 204034 Вопросов: 106 Ответов: 1919 |
Профиль | Цитата | #12 | Добавлено: 12.01.04 18:01 |
Забыл... Уберите строчку (без нее работает): MmToTwip LeftMarginWidth, TopMarginHeight, RightMarginWidth, BottomMarginHeight 'переводим из мм в Твипы ---------- |
Страница: 1 |
|