C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
прямая печать на матричный принтер, как заставить его печатать?
ExplodeMan
Отправлено: 20.10.2004, 00:14


Ученик-кочегар

Группа: Участник
Сообщений: 18



есть такая задача: для определенной деятельности нужно печатать на матричном принтере некий бланк. при этом нужно печататать именно стандартными командами принтера(esc-последовательностями), в частности, устонавливать плотность печати, толщину шрифта и т.д. и т.п. В досе это решалось просто:

union REGS rg;
int printchar(int chr) {
putch(chr);
rg.h.ah = 5;
rg.h.dl = chr;
int86(0x21, &rg, &rg);
}

благодаря этой незатейливой функции всё и присходило.....
теперь настала необходимость реализовать то же самое на Билдере.
Казалось бы, пиши в порт (LPT) поочерёдно символы, принтер будет печатать... но так не выходит:

DWORD dw;
char* buffer="TEST!!!!";
HANDLE pLPT=CreateFile( "LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
WriteFile(pLPT, &buffer,sizeof(buffer),&dw,NULL);

вроде, после запуска этой конструкции, принтер должен распечатать "TEST", но ничего не происходит!
хэлп! подскажите, что делать-то??????????
xim
Отправлено: 20.10.2004, 11:45


Станционный диспетчер

Группа: Участник
Сообщений: 143



Можно печатать примерно так:

CODE

enum{
     PRN_OK=0,
     E_NOT_OPEN_PRN,
     E_NOT_STRT_DOC
   };

int buf_to_prn(char *szBuffer,char *szPrinter)
{
  HANDLE hPr;
  if(OpenPrinter(szPrinter,&hPr, NULL)==FALSE)return E_NOT_OPEN_PRN;

  try
  {

     DOC_INFO_1 di={"",NULL,"RAW"};
     if(StartDocPrinter(hPr,1,(LPBYTE)&di)==0)
     {
       ClosePrinter(hPr);
       return E_NOT_STRT_DOC;
     }
     DWORD cnt=0;
     WritePrinter(hPr,(LPVOID)szBuffer,strlen(szBuffer),&cnt);
     EndDocPrinter(hPr);
  }__finally
  {
     ClosePrinter(hPr);
  }

  return PRN_OK;
}


а уже в szBuffer вставлять управляющие последовательности
CODE

\x1b@\x1bH\x1b9\x1b0\x1bM\x1bx<!--POST BOX-->...
xim
Отправлено: 20.10.2004, 11:49


Станционный диспетчер

Группа: Участник
Сообщений: 143



млин, этот POST BOX уже достал (почему в тегах "коде" обратный \ + 0 все-таки срабатывает) sad.gif
Guest
Отправлено: 20.10.2004, 15:48


Не зарегистрирован







С месяц назад на аналогичный вопрос отправлял исходники для печати на матричном принтере (как из под ДОС-а, т.е. не графикой, а зашитым шрифтом, с выбором прописанного в Винде принтера).
gvg
Отправлено: 20.10.2004, 16:00


Машинист паровоза

Группа: Участник
Сообщений: 222



Смотрите "Рулонная печать в Windows"

Вернуться в Вопросы программирования в C++Builder