Вывод на печать в VB

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Вывод на печать в VB

Сообщение GRS » 18.10.2004 (Пн) 12:21

Привет, друзья! :wink:

Сегодня, впервые после долгого творческого затишья, пишу ВАМ! Рад всех видеть! :wink: :!:

Вопрос такой: как мне напечатать из своей программы (VB 6.0), например, строчку "ПРИВЕТ". Принтер в системе стоит. Т.е., я не помню (трудно вспомнить, когда не знаешь :shock: ) команды печати в VB. Это первая часть вопроса. Заранее благодарен. :wink:
Теперь вторая: Куда посылать ESC команды печати и как это делать? Напрямую в порт? Как это делается, подскажите пожалуйста.
Собственно, дело в том, что я-таки дописал порграмму, которая прижилась на "кассе", теперь надо из нее отправлять данные на чековый принтер. Как Вы понимаете - для печати чеков :D . С печатью столкнулся впервые, по сему и трачу Ваше драгоценное время :wink:

Всем БОЛЬШОЕ СПАСИБО!
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 18.10.2004 (Пн) 12:40

printer.print "Привет"

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.10.2004 (Пн) 12:54

Принтер матричный?
Учить мануал к нему и слать в файл lpt.
Lasciate ogni speranza, voi ch'entrate.

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 18.10.2004 (Пн) 18:30

alibek писал(а):Принтер матричный?
Учить мануал к нему и слать в файл lpt.


Подскажите, как мне отослать из VB в порт LPT :?:
Кто с ESC командами сталкивался? Проблема в том, что мне не надо, к примеру, напечатав одно слово, "выкидывать" весь лист. Прикиньте, какой чек "бАльшой" будет? :roll: Это ж жуть! :? Я думал, это можно как-то контролировать, не так ли?
Принтер чековый, но использует протокол совместимый с EPSON. Мануальчик к нему есть и все команды тоже, только как посылать?...
Блин... :roll:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.10.2004 (Пн) 21:35

Open "lpt1" For Output As 1
Print #1, "что захочешь" & Chr(27) & "любой эскейп"
...
Close 1
Изображение

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 4:58

Не очень понятно:

tyomitch писал(а): "что захочешь" & Chr(27) & "любой эскейп"...


"Что захочешь" - это что? :shock: Не могли бы Вы пояснить?

Ребята, спасибо Вам! :wink:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.10.2004 (Вт) 10:46

Ищи в инете хелп по строке "Epson-совместимые команды" или "команды ESC/P". Например, тут.
Т.е. ты открываешь файл
Open "prn" For Output As #1
затем шлешь на него текст и команды; команды предваряются префиксом Chr$(27)
Print #1, "text1" & Chr$(27) & " 4" & "text2"
Ну и в конце закрываешь файл
Close #1
Lasciate ogni speranza, voi ch'entrate.

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 11:06

alibek - СПАСИБО, дружище. Буду пробывать.

Есть другой трабл. Принтер этот подключен на удаленной машине, стало быть, печать напрямую в порт становится невозможно. Можно как-то объект Printer "покрутить"? Если я в методе Printer.Print укажу, например, не текст, а последовательность комманд ESC, он их воспримет, как команды?... :? Буду пробывать...

А, вот еще вопрос! :wink: Печать картинок. Могу я как-то в обход всяких Image и PictureBox объектов напечатать рисунок, который, скажем, лежит на c:\pics\image001.jpg :?: Пробывал писать Printer.PaintPicture LoadPicture("c:\pics\image001.jpg"), говорит, мол метод Unknown, иди пописай. :shock: Что можете сказать по этому поводу? (Только не ругайтесь, все когда-то "упираются")

Спасибо!
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.10.2004 (Вт) 11:30

Если нужно осуществлять текстовую печать на сетевой принтер, единственный способ -- подмаппить порт (LPT3, LPT4) на нужный принтер и осуществлять вывод на этот порт. Печатать в текстовом режиме непосредственно на сетевой принтер наверное невозможно.
Если используешь объект Printer, то печать всегда осуществляется через стандартный драйвер печати Windows. Т.е. печать идет в графическом режиме и про ESC-команды можешь забыть.
Печать картинок работает нормально. Видимо ты где-то ошибся в параметрах. Советую перевести Printer.ScaleMode в vbMillimeters, тогда все будет проще.
Lasciate ogni speranza, voi ch'entrate.

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 11:42

Что-то не то... :roll:

Код: Выделить всё
Printer.Print "Обычный" & Chr$(27) & " 4" & "Курсив"
Printer.EndDoc


И выдает в итоге на бумаге: Обычный4Курсив.
Почему? :shock:

Еще, alibek, Open "prn" for output as #1 - создает файл. Или вместо "prn" надо что-то другое ставить? Идентификатор принтера или что? Или мне этот файл на печать выкидвать надо? Тогда как это сделать? Открывать для чтения и также через метод print?

Подскажи, не могу разобраться... :roll:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 19.10.2004 (Вт) 11:48

Можно сделать печать с эскейп командами в файл, а на удаленной машине запустить DOS команду в формате:
PRINT [D:устройство] [диск]:[путь]имя файла]

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.10.2004 (Вт) 12:43

Я же сказал, если используешь объект Printer, забудь о ESC-командах.
PRN должно работать. У тебя принтер установлен, как локальный? Попробуй Open "lpt1" For Output #1.
LPT1 (и PRN) это не файл, это и есть порт принтера. И все, что ты выводишь в этот "файл" посылается на принтер.
Lasciate ogni speranza, voi ch'entrate.

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 13:00

Еще вопрос :wink: ...

У меня сейчас такая проблема... Мне надо, что бы страница заканчивалась тогда, когда заканчивается текст на ней. Т.е., принтер с автоотрезом и мне надо, что бы он обрезал по длине. А он отматывает до длины А4 и обрезает. Представляете, какой "чек" выходит? :lol: В опциях принтера нет настроек таких, там все "мертво". Кто поможет :?:


Спасибо!... :wink:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 19.10.2004 (Вт) 13:02

добавть в конец текста chr(12)
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 13:10

kif писал(а):добавть в конец текста chr(12)


Добавил... Блин, и нифига - так же отмотал, отрезал... И чё бум делать? Как тут еще можно? :roll: :(
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 19.10.2004 (Вт) 13:14

Я имел в виду:

Open "Output.txt" For Output As #1 ' Open file for output.
Write #1, Chr(27) & 14, "This condenced font"
Close #1

а затем, с командной строки

PRINT D:prn Output.txt

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 19.10.2004 (Вт) 13:15

Не Chr(12), а Chr(27) & 12

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 13:37

ta_gena писал(а):Я имел в виду:

Open "Output.txt" For Output As #1 ' Open file for output.
Write #1, Chr(27) & 14, "This condenced font"
Close #1

а затем, с командной строки

PRINT D:prn Output.txt


Я попробывал, и вот что вывел он мне...

",12,"This condenced font"

Я ниче понять не могу... Может как-то надо инициализировать его? Ведь вот то, что он печатает, говорит о том, что он не воспринимает CHR$(27) как указатель на Esc команду, правильно?
Есть у объекта Printer свойство, которое устанавливает размер страницы? Нашел какое-то PaperSize, только вот, какие параметры - определить не могу. Что там указывать надо? Да и поможет ли это?
Честное слово, забадался уже. Сейчас буду пробывать отсылать напрямую в порт, как alibek советовал, через open "lpt1" for output as #1... Даст ли эффект? :roll: :?: :?: :?:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 19.10.2004 (Вт) 13:43

Эти эскейп коды для матричного принтера.

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 19.10.2004 (Вт) 13:43

Для лазерного принтера врядли какие-либо коды будут работать.

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 13:46

Ну, так он и есть матричный. В чем тогда дело?...
Я, кстати, нашел константы Printer.PageSize. Есть там одна, Const vbPRPSUser = 256 (&H100). А как мне размер задать? Я никаких свойств, вроде PageWith или PageHeigh не нашел... Помогите, пожалуйста!

:cry: :cry: :cry:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 19.10.2004 (Вт) 14:01

Тогда так
Open "Output.txt" For Output As #1 ' Open file for output.
Write #1, Chr(27), Chr(14), "This condenced font", Chr(13), Chr(10)
Write #1, Chr(27), Chr(12)
Close #1

а затем, с командной строки

PRINT D:prn Output.txt

Теперь должно работать
Последний раз редактировалось ta_gena 19.10.2004 (Вт) 14:01, всего редактировалось 1 раз.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 19.10.2004 (Вт) 14:01

Текст и рисунок из Word-а печатаются нормально? А то может и печатать обычным генератором отчетов...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 14:22

Сейчас попробую...

Вот еще вопрос, я прочитал, что допустим команда ESC FF для принтера выводит какой-то отчет (не важно). В мануале есть еще и вариант в шестнадцатиричном коде этой же команды (да и всех команд вообще) и выглядит он так: 1B FF. Я не понимаю одного, как этот FF написать? Chr$(27)&"FF" - так что ли? Он пишет только букву F и все. Я напрямую посылаю в порт LPT - все принимает тут же. Т.е. половина проблемы решена: он лист не отматывает! :P Печатает букву F и стоит. Можно ли ему шестнадцатиричную запись команды послать? Как это будет выглядеть? Потому что команда "обрезание листа" вообще выглядит GS V без какого-либо ESC. Т.е., хотелось бы увидить синтаксически правильную запись команды ESC FF и GS V.
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 19.10.2004 (Вт) 14:26

Сейчас попробую...


Кстати, это надо было попробовать первым делом.
Ибо если будет печатать из Word-a, то тогда можно пользовать и генераторы отчетов, а при этом все становится элементарно...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 19.10.2004 (Вт) 14:42

FF - это 255

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 18:45

ta_gena писал(а):FF - это 255


Это ты как получил? Поясни, пожалуйста. :?
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.10.2004 (Вт) 19:02

ta_gena, вместо Write для печати на принтере нужно использовать Print: Write искажает передаваемые данные (расставляет кавычки и запятые).
Последний раз редактировалось tyomitch 19.10.2004 (Вт) 19:23, всего редактировалось 1 раз.
Изображение

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 19.10.2004 (Вт) 19:15

tyomitch писал(а):ta_gena, вместо Write для печати на принтере нужно использовать Print - Write искажате передаваемые данные (расставляет кавычки и запятые).


:lol: Я на этом собаку съел! :wink:
Только скажите мне, как из FF получили 255 :?:

:wink:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.10.2004 (Вт) 19:24

FF - шестнадцатеричная запись числа 255
Получили, например, с помощью калькулятора в инженерном режиме
(нажимаешь F5, печатаешь "FF", нажимаешь F6 - он тебе показывает "255")
Изображение

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList