Форум — Ответы ( К темам )
? | Adler: Печать PaintBox->Canvas на принтер (04-03-2003 15:15:22) |
Подскажите ответ на: void __fastcall TMainForm::PrintReport() { TPaintBox* Box = new TPaintBox(Application); // статическа часть рисования (линии, тексты) Box->Canvas->TextOut(), // Box->Canvas->LineTo(); // динамическая часть вставляется различный текст из базы Printer()->BeginDoc(); DataModule1->ADOQuery2->First(); while(DataModule1->ADOQuery2->Eof){ if(BoxsHeight<=Printer()->PageHeight){ // Как нарисовать этот паинт бокс } else Printer()->NewPage(); DataModule1->ADOQuery2->Next(); } // end while Printer()->EndDoc(); } | |
Георгий (07-03-2003 14:45:35) | |
попробуй PaintBox положить на панель (Panel) и написать следующее: this->Panel1->PaintTo(Printer()->Handle,10,10); по идее должно напечатать (мне проверить не начем). | |
Andrew (10-03-2003 11:34:26) | |
Немного не совсем по теме, но думаю будет интересно. Я для отладки печати использую любой PS-принтер. Печатаешь в файл, а потом полученный файл конвертишь Acrobat Distiller'ом в PDF и смотришь Acrobat'ом. В принципе можно настроить так, что конвертация и показ происходит автоматически. | |
Devnvd (10-03-2003 13:05:21) | |
Для печати рисуйте предварительно в Bitmap. Если рисунок содержит немного элементов, то можно рисовать сразу с помощью Canvas принтера. void __fastcall TMainForm::PrintReport() { TPrinter Prntr = Printer(); Graphics::TBitmap *Box=new Graphics::TBitmap; //Установите необходимые размеры Box->Width=...; Box->Height=...; // статическа часть рисования (линии, тексты) Box->Canvas->TextOut(), // Box->Canvas->LineTo(); // динамическая часть вставляется различный текст из базы Prntr->BeginDoc(); DataModule1->ADOQuery2->First(); while(DataModule1->ADOQuery2->Eof){ if(BoxsHeight<=Prntr->PageHeight){ // Как нарисовать этот паинт бокс Prntr->Canvas->Draw(x,y,Box); // Или Prntr->Canvas->StretchDraw(RectPrinter,Box); // Или Prntr->Canvas->CopyRect(RectPrinter,Box->Canvas,RectBitmap); } else Prntr->NewPage(); DataModule1->ADOQuery2->Next(); } // end while Prntr->EndDoc(); } Удобнее рисовать предварительно в метафайл, так как он хорошо масштабируется, если фонты использовать TrueType. void GetMetafile(TMetafile *pMetafile, bool id_emf) { TMetafileCanvas *pCanvas=0; if(pMetafile){ delete pMetafile; pMetafile=0; } pMetafile = new TMetafile; pMetafile->Enhanced=id_emf; //WMF или EMF //Размеры pMetafile->Width=8300; pMetafile->Height=4250; pCanvas = new TMetafileCanvas(pMetafile,0); // Рисуете с помощью pCanvas Draw_Box(pCanvas); if(pCanvas){ delete pCanvas; pCanvas=0; } } Напечатать можно также как и битмап Prntr->Canvas->Draw(x,y,pMetafile); // Или Prntr->Canvas->StretchDraw(RectPrinter,pMetafile); |