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

 
Как печатать на матричном принтере
Сергей
  Отправлено: 03.12.2004, 09:12


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







Как определить матричный это принтер или лазерный?
Если принтер матричный то как распечатать набраный в TMemo текст непосредственно в текстовом режиме — как это делается в "фар менеджере"?
Vlad
Отправлено: 03.12.2004, 14:54


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

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



Если не забуду,то после выходных дам кусок кода для печати в текст моде, на принтере используя его как дос. программа. Этот кусок у меня использовался для печати на матричном принтере (огромные рулоны отчетов). Кстати вот один из компонентов

User Attached Image Скачать файл
bhrawprint.zip


Guest
Отправлено: 03.12.2004, 15:46


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







Спасибо за компонент надо будет попробовать.
Я пробовал через CreateFile но в 98 не очень хорошо т.к. прога висит пока не допечатает до конца весь текст.
AVC
Отправлено: 03.12.2004, 15:50


Ветеран

Группа: Модератор
Сообщений: 1583



Эмуляция dos printera в win (так делает Far по alt F5) основана на функциях
OpenPrinter
StartDocPrinter
WritePrinter
EndDocPrinter
ClosePrinter

Пример использования
CODE

DOC_INFO_1 doc_info_1;
doc_info_1.pDocName  = docname.c_str();
doc_info_1.pOutputFile = NULL;
doc_info_1.pDatatype = NULL;

HANDLE phandle = 0;
DWORD tcou = text.Length();
DWORD pcou = 0;

bool ret = true;

try {
if (!OpenPrinter(prnname.c_str(), &phandle, NULL))
 throw Exception("OpenPrinter");

if (!StartDocPrinter(phandle, 1, (LPBYTE)(&doc_info_1)))
 throw Exception("StartDocPrinter");

if (!WritePrinter (phandle, text.c_str(), tcou, &pcou))
 throw Exception("WritePrinter");

if (!EndDocPrinter(phandle))
 throw Exception("EndDocPrinter");

} // try

catch (Exception &xcp)
{ text = AnsiString("Ошибка при вызове функции ") + xcp.Message;
ShowMessage(text);
ret = false;
}

if (phandle) ClosePrinter(phandle);
Сергей
Отправлено: 06.12.2004, 09:37


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







А как же определить матричный это принтер или нет? sad.gif
xim
Отправлено: 08.12.2004, 18:53


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

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



Я делал нечто подобное:

CODE

int is_matrix(char *szPrnName)
{
 int bResult=1;
 HDC dcPrn;
 try
 {
    dcPrn=CreateDC("WINSPOOL",szPrnName,NULL,NULL);
 }catch(...)
 {
    return -1; // ошибка обращения к принтеру, поможет GetLastError()
 }

 if(GetDeviceCaps(dcPrn , LOGPIXELSX)>200)
/***************************************************
LOGPIXELSX — пунктов по горизонтали (можно регулировать)
***************************************************/
 bResult=0;

 DeleteDC(dcPrn);
 return bResult;
}


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