Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

пЕЧАТЬ

596
17 декабря 2003 года
sinyk
58 / / 07.07.2003
Я печатаю квикрепорт... Вопрос : как посылать escape последовательности на принтер ?
2.0K
17 декабря 2003 года
Fazil6
126 / / 17.12.2003
Цитата:
Originally posted by sinyk
Я печатаю квикрепорт... Вопрос : как посылать escape последовательности на принтер ?



Используешь API
Пишешь простейший класс


class GPrinter
{
public:

GPrinter();
~GPrinter();

int PrintString(char* string, bool oem = true);
int Cr();


private:

HANDLE HPrinter;
COMMTIMEOUTS to;
DWORD nNumberOfBytesToWrite;

DWORD dwOldWriteTimeout;
};

Конструктор

GPrinter::GPrinter()
{
HPrinter = CreateFile("prn",
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if (!HPrinter)
{
::MessageBox(0, "HPrinter failed!", "ERROR", 0);
}

GetCommTimeouts(HPrinter, &to);
dwOldWriteTimeout = to.WriteTotalTimeoutConstant;
to.WriteTotalTimeoutConstant = 3000; /*-- SHOULD BE >= 2 sec to avoid INVALID_PARAMETER error--*/
SetCommTimeouts(HPrinter, &to);
}


Деструктор

GPrinter::~GPrinter()
{
if (HPrinter != INVALID_HANDLE_VALUE)
{
to.WriteTotalTimeoutConstant = dwOldWriteTimeout;
SetCommTimeouts(HPrinter, &to);
CloseHandle(HPrinter);
}
}

Функция печати
int
GPrinter::PrintString(char* string, bool oem)
{
unsigned int ret;
char text[1024];
if (oem == true) ::CharToOem(string, text);
else strcpy(text, string);

ret = WriteFile(HPrinter, text, strlen(text), &nNumberOfBytesToWrite, NULL);

if (!ret) return 1;
else return 0;
}


int
GPrinter::Cr()
{
unsigned int ret;
unsigned char cr[2];

cr[1] = 13;
cr[0] = 10;

ret = WriteFile(HPrinter, cr, 2, &nNumberOfBytesToWrite, NULL);

if (!ret) return 1;
else return 0;
}


Создаешь обект и построчно печатаешь
GPrinter pr;
pr.PrintString("Первая строка");
pr.Cr();

pr.PrintString("Вторая строка ");
pr.Cr();

Все. Параметры функции CreateFile в конструкторе могут быть изменены как тебе требуется...

596
22 декабря 2003 года
sinyk
58 / / 07.07.2003
Для сетевого принтера все также ? ... а то что-то у меня не работает
2.0K
24 декабря 2003 года
Fazil6
126 / / 17.12.2003
Цитата:
Originally posted by sinyk
Для сетевого принтера все также ? ... а то что-то у меня не работает



Ескейпами ты по сети печатать не сможешь в принципе...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог