Страница: 1 |
Страница: 1 |
Вопрос: Принтер: усовершенствовать вывод текста
Добавлено: 07.07.05 23:54
Автор вопроса: Morpheus | Web-сайт:
Привет всем!
Достался мне тут на днях принтер старенький (зато нахаляву :), решил чё нить замутить полезного на бейсике, а то какой понт из ворда печатать :)?
Проблемка возникла с выводом текста. Вобщем то всё нормально, но хотелось бы кое чего получше.
Перерыл форум через поиск, точнее все тамы со словом "Принтер". Ничего к сожалению полезного не встретил. В факах нашёл только это (http://www.vbnet.ru/faq/showtopic.asp?id=439), но это похоже не по моеё части пока :(
Короче, я делаю вывод так:
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, ByVal pDefault As Long) As Long
Private Declare Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pDocInfo As DOC_INFO_1) As Long
Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long
Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Type DOC_INFO_1
pDocName As String
pOutputFile As String
pDatatype As String
End Type
Const s As String = "Hello World!"
Private Sub Command1_Click()
Dim hPrinter As Long
Dim jobID As Long
Dim Res As Long
Dim Written As Long
Dim PrintData As String
Dim DocInfo As DOC_INFO_1
Res = OpenPrinter(Printer.DeviceName, hPrinter, 0)
If Res = 0 Then
MsgBox "Unable to print the page", vbCritical, "Another fuckup happened"
End
End If
DocInfo.pDocName = "HelloWorld"
DocInfo.pOutputFile = vbNullString
DocInfo.pDatatype = vbNullString
jobID = StartDocPrinter(hPrinter, 1, DocInfo)
StartPagePrinter hPrinter
PrintData = s & vbFormFeed
WritePrinter hPrinter, ByVal PrintData, Len(PrintData), Written
EndPagePrinter hPrinter
EndDocPrinter hPrinter
ClosePrinter hPrinter
End Sub
Всё работает на ура, а как мне сделать вывод текста, аналогичный TextOut? Можно ли вообще тут использовать всякие DrawText'ы и если да, то как? Никто не знает? есть пример?
Заранее благодарен.
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #1
Добавлено: 08.07.05 00:11
nu a che tebe ne nravit`sya t VB'shnym standartnym Priner objektom? cherez nego mozhno, i normal`n opo moemu rabotaet
Номер ответа: 2
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #2
Добавлено: 08.07.05 00:11
nu a che tebe ne nravit`sya t VB'shnym standartnym Priner objektom? cherez nego mozhno, i normal`no po moemu rabotaet
Номер ответа: 3
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #3
Добавлено: 08.07.05 00:39
Спасибо, просто недолюбливую я его... а как им вывести текст заданного размера и шрифта в нужных координатах?
Номер ответа: 4
Автор ответа:
Softer
ICQ: 203660381
Вопросов: 29
Ответов: 205
Web-сайт:
Профиль | | #4
Добавлено: 08.07.05 04:57
Printer.CurrentX - координата по горизонтали
Printer.CurrentY - --//-- по вертикали
Printer.Font.Size - без коментариев
Printer.Font.Italic - --//--
Printer.Font.Underline - --//--
Printer.Print - вывод на печать
printer.paintpicture (или чет в таком роде) - вывод графики.
ЗЫ: Вообще методов и свойств больше (например, смена принтера по-умолчанию,ето настроек), но я пока использую только эти.
Номер ответа: 5
Автор ответа:
Softer
ICQ: 203660381
Вопросов: 29
Ответов: 205
Web-сайт:
Профиль | | #5
Добавлено: 08.07.05 05:00
Кстати, а не мог бы ты объяснить, че ето у тебя за способ печати? Можно почтой или аськой:
SofterSoft@narod.ru
203-660-381
Номер ответа: 6
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #6
Добавлено: 08.07.05 09:44
Там в библиотеке кодов (ссылка на второй код с главной страницы) есть код печать RichTextBox. Хоть и глючный, но принцип посмотреть можно.
Номер ответа: 7
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #7
Добавлено: 08.07.05 16:54
Блин, тут на месте этого ответа, то есть под номером семь, должен был мой находиться ((
Павел, UU, вы не стирали случайно???
2 Александр
вот эта ссылка? http://www.vbnet.ru/faq/showtopic.asp?id=439
Да, вещь хорошая, и скорее всего пригодится... когда нить. Я же щас пытаюсь понять принцип печати через АПИ и работе со спулером (или без него) более досконально, начав с простого вывода текста... пока к сожалению не выходит.
Номер ответа: 8
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #8
Добавлено: 09.07.05 01:57
poprobuj zamenit`
ByVal PrintData
na
ByRef PrintData
Номер ответа: 9
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #9
Добавлено: 09.07.05 02:25
а для чего это? мой код полностью рабочий, но я ищу другое
Номер ответа: 10
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #10
Добавлено: 10.07.05 11:29
na, vzglyani. po moemu po teme:
http://www.verifiedsoftware.com/downloads/bmp.htm
Номер ответа: 11
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #11
Добавлено: 10.07.05 11:30
a voobshe, idem v www.google.com, i pishem:
+API +WritePrinter
davim na Enter, i smotrim
Номер ответа: 12
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #12
Добавлено: 10.07.05 20:38
Да, хитрая вещь, оказывается WritePrinter может и большее. Это же довольно низкоуровневая функция?
Мне просто покой не даёт тот факт, что раз у принтера есть свойство .hDC то вывод на нём мало чем должен отличаться от вывода на монитор. Похоже на правду? все операции записываются в журнал и вооплащаются в жизнь при вызове EndPage... хорошо если бы работало... Лады не ругайтесь за тупость- я только начинаю с печатью работать. если допру как сделать более или менее красиво-сразу сообщу