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

 
Рулонная печать в Windows
Виталик
Отправлено: 28.05.2003, 09:25


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







Необходимо распечатать длинную (высота более 1м) таблицу на матричном принтере (рулонная подача бумаги). Проблема в том, что максимальная высота листа, выбираемая в диалоге PrintSetup составляет ~590 мм.

Разбивать на страницы не хотелось бы — появляются "разрывы".
Интересно бы задать свои размеры листа...
Как сделать в ВСВ — не знаю sad.gif
Может кто сталкивался с подобными задачами?
gvg
Отправлено: 26.08.2004, 16:39


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

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



Вот классик для печати

class TRawPrint
{
private:
HDC DC2;
void __fastcall Delete (void);
public:
void __fastcall Abort ();
void __fastcall Start ();
void __fastcall Print ( AnsiString str = "" );
void __fastcall End ();
__fastcall TRawPrint ();
__fastcall ~TRawPrint ();
};




//---------------------------------------------------------------------------
//#include "CPPB.h"
#include
//---------------------------------------------------------------------------
typedef struct
{
Word wLen;
char sStrting[2048];
} PASSREC;

static bool FAbort;
//---------------------------------------------------------------------------
/*int __stdcall AbortProc ()
{
return ( !FAbort );
}*/
//-----------------------------------------------------------------
bool __stdcall AbortProc ( HDC hdc, int iError )
{
return ( !FAbort );
}
//-----------------------------------------------------------------
__fastcall TRawPrint::TRawPrint ()
{
DC2 = NULL;
}
//-----------------------------------------------------------------
__fastcall TRawPrint::~TRawPrint ()
{
Delete ();
}
//-----------------------------------------------------------------
void __fastcall TRawPrint::Delete ()
{
if ( DC2 )
{
DeleteDC ( DC2 );
DC2 = NULL;
}
}
//-----------------------------------------------------------------
void __fastcall TRawPrint::Abort ()
{
FAbort = true;
}
//-----------------------------------------------------------------
void __fastcall TRawPrint::Start ()
{
char FDriver[256];
char FDevice[256];
char FPort[256];
unsigned FDeviceMode;
DOCINFO DocInfo;

FAbort = false;
Delete ();
DocInfo.cbSize = sizeof ( DocInfo );
DocInfo.lpszDocName = Printer ()->Title.c_str ();
DocInfo.lpszOutput = NULL;
DocInfo.lpszDatatype = "RAW";
DocInfo.fwType = 0;
Printer ()->GetPrinter ( FDriver, FDevice, FPort, FDeviceMode );
DC2 = CreateDC ( OsVersion.dwPlatformId != VER_PLATFORM_WIN32_NT ? NULL : "WINSPOOL", FDriver, NULL, NULL );
// SetAbortProc ( DC2, AbortProc );
Escape ( DC2, SETABORTPROC, 0, (LPSTR) AbortProc, NULL );
StartDoc ( DC2, &DocInfo );
}
//---------------------------------------------------------------------------
void __fastcall TRawPrint::Print ( AnsiString str )
{
PASSREC PrintRec;

str += "\x0d\x0a";
AnsiToOem ( str.c_str (), str.c_str ());
strcpy ( PrintRec.sStrting, str.c_str ());
PrintRec.wLen = str.Length ();
Escape ( DC2, PASSTHROUGH, 0, (char *) &PrintRec, NULL );
}
//---------------------------------------------------------------------------
void __fastcall TRawPrint::End ()
{
::EndDoc ( DC2 );
}
//---------------------------------------------------------------------------


Отредактировано gvg — 26/08/2004, 17:47

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