On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 16.04.09 12:56. Заголовок: Загрузка шрифтов в принтер


Здравствуйте Всем!
Завершаю перевод большого Clipper-проекта под HARBOUR. Уже работает почти все, однако есть еще проблемы.
Одна из них - режим прямой DOS-печати на принтер. В Clippere для LJ принтеров нами были нарисованы русские фонты с псевдографикой, которые загружались в принтер перед печатью. Фонтов - несколько, разных размеров. Они имитировали размеры Epson - принтеров. В HARBOUR загрузка не получается, так как не работает функция PRINTSEND (она из CT2). Может быть подскажете как обойти проблему?

Спасибо: 0 
Цитата Ответить
Ответов - 9 [только новые]


постоянный участник




Пост N: 835
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.04.09 13:18. Заголовок: Использую библиотеку..


Использую библиотеку Александр Простосердова <clipperforwindows@narod.ru>.
Посмотреть можно на http://clipperforwindows.narod.ru/

Мой проверочный пример

Tstprint2(GetDefaultPrinter())

*:*********************************************************************
FUNCTION TstPrint2(cPrinter)
LOCAL nI
/*
Синтаксис печати
Set( 20, 'SPOOLER', nROW, nCOL, nFORMAT ), где
nROW  -  количество строк на листе;
nCOL  -  количество столбцов на листе;
nFORMAT - формат бумаги:
      1 - А4 портрет,
2 - А4 альбомная,
3 - В5
*/
Set( 20, 'SPOOLER', 45, 140, 2, cPrinter, HB_OEMTOANSI("Лист 2 - альбом") )
@ 0, 0 Say '0 Лист 2 - альбом'
@ 1, 0 Say "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
@ 2, 0 Say "2 10 20 30 40 50 60 70 80 90 100 110 120 130 140"
@ 3, 0 Say "3 ╔═════════════╦══════════════════════════╦═════════════════════════╦════════════════╦══════════════════╦═════════════╦═════════════════╗"
@ 4, 0 Say "4 ║ ЗАЯВКА ║ ЗАКАЗЧИК ║ ВИД НЕИСПРАВНОСТИ ║СРОКИ ВЫПОЛНЕНИЯ║ УСТАНОВЛЕННОЕ ║ОПЛАТА РАБОТЫ║ПРИБЫТИЕ-КВАРТИРА║"
@ 5, 0 Say "5 ║ No/Дата ║ АДРЕС, Ф.И.О., ТЕЛЕФОН ║ ПРИМЕЧАНИЕ ЗАЯВКИ ║СРОЧНОСТЬ,МАСТЕР║ ОБОРУДОВАНИЯ ║ (если есть) ║ ДАТА (ПОДПИСЬ) ║"
@ 6, 0 Say "6 ╠═════════════╬══════════════════════════╬═════════════════════════╬════════════════╬══════════════════╬═════════════╬═════════════════╣"
FOR nI := 7 TO 44
@ nI,0 say ALLTRIM(STR(nI))
NEXT
@ 45, 110 Say 'Конец листа 1'
Eject
Set Device TO Screen

RETURN ( NIL )


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1093
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.04.09 16:15. Заголовок: wad1 пишет: В HARBO..


wad1 пишет:

 цитата:
В HARBOUR загрузка не получается, так как не работает функция PRINTSEND (она из CT2). Может быть подскажете как обойти проблему?



Вместо PrintSend шрифт можно загрузить на принтер обычными файловыми функциями fopen/fwrite:

nHandle := FOPEN('PRN', 1)
FWrite(nHandle, cFont)
...
FClose(nHandle)


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 16.04.09 16:46. Заголовок: Спасибо, Pasha! Полу..


Спасибо, Pasha! Получилось. Причем все записывается оптом, без применения буферизации (64К позади), т.е. очень быстро.

Спасибо: 0 
Цитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 18.04.09 19:07. Заголовок: Если принтер включен..


Если принтер включен, то все хорошо. Если же выключен, а печать в WINDOWS настроена "прямо на принтер", то программа вешается намертво. Есть ли какие-то способы проверить готовность принтера или прерывания действия функции FWRITE()?
Андрей! Я скачал демку Простосердова для пробы. Так вот она ведет себя точно также.

Спасибо: 0 
Цитата Ответить
постоянный участник




Пост N: 836
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.04.09 20:59. Заголовок: wad1 пишет: Я скача..


wad1 пишет:

 цитата:
Я скачал демку Простосердова для пробы. Так вот она ведет себя точно также.



Здесь на форуме обсуждалась эта проблема ! Нельзя проверить включен принтер или нет !
Наши гуру не дали нам ответа на этот вопрос !

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1094
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.04.09 08:23. Заголовок: wad1 пишет: Если же..


wad1 пишет:

 цитата:
Если же выключен, а печать в WINDOWS настроена "прямо на принтер", то программа вешается намертво. Есть ли какие-то способы проверить готовность принтера или прерывания действия функции FWRITE()?



Надо проверять, что возвращает fwrite. Если меньше, чем длина строки для печати - значит, строка на принтер не выведена

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 21.04.09 10:13. Заголовок: В том то и беда, что..


В том то и беда, что FWRITE() ничего не возвращает, так как на ней программа затыкается (в отладчике проверял). Почему-то не срабатывает никакой TIME-OUT. Причем происходит это только с файлом шрифтов. При посылке обычного текстового файла затыкания нет: программа рапортует, что печать закончена, и при последующем включении принтера выполняет печать.

Спасибо: 0 
Цитата Ответить
Администратор




Пост N: 1096
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.04.09 11:14. Заголовок: Можно выводить строк..


Можно выводить строку посимвольно, проверяя каждый байт:

LOCAL e, ser := 1

while ser <= len(cStr)
if FWRITE(nHandle, Substr(cStr, ser, 1)) # 1
e = ErrorNew()
e:genCode = EG_PRINT
e:canDefault = .f.
e:canRetry = .t.
e:severity = ES_ERROR
if ! EVAL(ErrorBlock(), e)
Exit
endif
else
ser ++
endif
enddo


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 21.04.09 14:28. Заголовок: Спасибо, Pasha, за у..


Спасибо, Pasha, за участие!
Оказывается, что примерно 66500 байт уходят куда-то нормально (в какой-то буфер), а при посылке следующего байта возврата из FWRITE() не происходит. Видимо поэтому небольшие текстовые файлы улетали у меня без проблем.

Спасибо: 0 
Цитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 63
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет