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 все-таки срабатывает) |
|
Guest |
Отправлено: 20.10.2004, 15:48 |
|
Не зарегистрирован
|
С месяц назад на аналогичный вопрос отправлял исходники для печати на матричном принтере (как из под ДОС-а, т.е. не графикой, а зашитым шрифтом, с выбором прописанного в Винде принтера). |
|
gvg |
Отправлено: 20.10.2004, 16:00 |
|
Машинист паровоза
Группа: Участник
Сообщений: 222
|
Смотрите "Рулонная печать в Windows" |
|
|