Сергей |
Отправлено: 03.12.2004, 09:12 |
|
Не зарегистрирован
|
Как определить матричный это принтер или лазерный?
Если принтер матричный то как распечатать набраный в TMemo текст непосредственно в текстовом режиме — как это делается в "фар менеджере"? |
|
Vlad |
Отправлено: 03.12.2004, 14:54 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Если не забуду,то после выходных дам кусок кода для печати в текст моде, на принтере используя его как дос. программа. Этот кусок у меня использовался для печати на матричном принтере (огромные рулоны отчетов). Кстати вот один из компонентов
|
|
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 |
|
Не зарегистрирован
|
А как же определить матричный это принтер или нет? |
|
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;
}
|
|
|