trichview.support
How to specify RVPrint's print size?Don't use "print set" dialog. |
Author |
Message |
xyz8848 |
Posted: 01/15/2005 18:52:49 How to specify RVPrint's print size? Don't use "print set" dialog. i want to set RVPrint's page size.but i don't think show "print set" dialog. example: /*...how to set system printer pagesize to "L" Orientation to DMORIENT_PORTRAIT in here*/ RVPrint1->AssignSource(RichViewEdit1); RVPrint1->FormatPages(TRVDisplayOptions()); //...print content code ======================= i have some referrence code : void __fastcall TForm1::PrintButtonClick(TObject *Sender) { // get the default printer name, driver, and port char *def_string = "no printer"; char buffer[MAX_PATH]; GetProfileString("windows", "device", def_string, buffer, MAX_PATH); AnsiString Abuffer(buffer); AnsiString Device, Driver, Port; // parse the buffer to extract individual properties int first_comma = Abuffer.Pos(","); Device = Abuffer.SubString(1, first_comma - 1); Abuffer = Abuffer.SubString(first_comma + 1, Abuffer.Length() - first_comma); int second_comma = Abuffer.Pos(","); Driver = Abuffer.SubString(1, second_comma - 1); Port = Abuffer.SubString(second_comma + 1, Abuffer.Length() - second_comma); // open the printer HANDLE HPrinter; if (OpenPrinter(Device.c_str(), &HPrinter, NULL)) { // call DocumentProerties() with a zero fMode parameter // to get the number of bytes required long int num_bytes; num_bytes = DocumentProperties(NULL, HPrinter, Device.c_str(), NULL, NULL, 0); // allocate the memory unsigned char *buffer = new unsigned char[num_bytes]; // call DocumentProperties() again, this time to get the // device mode information DocumentProperties(NULL, HPrinter, Device.c_str(), (PDEVMODE)buffer, NULL, DM_OUT_BUFFER); PDEVMODE pdm = (PDEVMODE)buffer; // modify the appropriate fields pdm->dmPaperSize = DMPAPER_USER; // for example pdm->dmPaperLength=127; pdm->dmPaperWidth=89; pdm->dmOrientation=DMORIENT_PORTRAIT; // tell Windows which fields we changed pdm->dmFields = pdm->dmFields | DM_PAPERSIZE|DM_ORIENTATION; // call DocumentProperties() yet again, this time to get // the final DEVMODE to pass into the CreateDC() function DocumentProperties(NULL, HPrinter, Device.c_str(), pdm, pdm, DM_OUT_BUFFER | DM_IN_BUFFER); /* // create a printer device context HDC HPrinterDC = CreateDC(Driver.c_str(), Device.c_str(), NULL, pdm); if (HPrinterDC) { DOCINFO di; di.cbSize = sizeof(DOCINFO); di.lpszDocName = "Test Print"; di.lpszOutput = (LPTSTR) NULL; di.lpszDatatype = (LPTSTR) NULL; di.fwType = 0; // start printing if (StartDoc(HPrinterDC, &di)) { if (StartPage(HPrinterDC)) { float fLogPelsX1, fLogPelsY1; fLogPelsX1 = (float)GetDeviceCaps(HPrinterDC, LOGPIXELSX); fLogPelsY1 = (float)GetDeviceCaps(HPrinterDC, LOGPIXELSY); RECT R = Rect(0, 0, fLogPelsX1 * 8.5, fLogPelsY1 * 11); // print some text ::DrawText(HPrinterDC, Memo1->Text.c_str(), Memo1->Text.Length(), &R, DT_LEFT | DT_EDITCONTROL | DT_WORDBREAK); EndPage(HPrinterDC); } EndDoc(HPrinterDC); } DeleteDC(HPrinterDC); } delete [] buffer; ClosePrinter(HPrinter); } */ } |
Powered by ABC Amber Outlook Express Converter