void __fastcall TForm1::Button1Click(TObject *Sender)
{
PrintDialog1->Options.Clear();
PrintDialog1->Options << poPageNums << poSelection;
PrintDialog1->FromPage = 1;
PrintDialog1->MinPage = 1;
PrintDialog1->ToPage = PageControl1->PageCount;
PrintDialog1->MaxPage = PageControl1->PageCount;
if (PrintDialog1->Execute())
{
int Start, Stop;
// determine the range the user wants to print
switch (PrintDialog1->PrintRange)
{
case prSelection:
Start = PageControl1->ActivePage->PageIndex;
Stop = Start;
break;
case prPageNums:
Start = PrintDialog1->FromPage - 1;
Stop = PrintDialog1->ToPage - 1;
break;
default: // prAllPages
Start = PrintDialog1->MinPage - 1;
Stop = PrintDialog1->MaxPage - 1;
break;
}
// now, print the pages
Printer()->BeginDoc();
for (int i = Start; i <= Stop; i++)
{
PageControl1->Pages->PaintTo(Printer()->Handle, 10, 10);
if (i != Stop)
Printer()->NewPage();
}
Printer()->EndDoc();
}
}
Подскажите как вывести на печать содержимое формы с нормальным разрешением???
Код:
Просмотрев понял что ето именно то что мне нужно, так как у меня тоже используется PageControl. После тестирования, оказалось, что картинка очень маленькая(меньше чем на мониторе в несколько раз). Порылся в литературе, нашел вывод изображения с масштабированием(правда на Delphi):
Код:
...
Printer.Canvas.Refresh;
//Получаю информацию о разрешении принтера
PointsX:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX)/70;
PointsY:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSY)/70;
//Расчитываю размеры изображения
X1:=round((Printer.PageWidth - Image1.Picture.Bitmap.Width*PointsX)/2);
Y1:=round((Printer.PageHeight - Image1.Picture.Bitmap.Height*PointsY)/2);
X2:=round(X1+Image1.Picture.Bitmap.Width*PointsX);
Y2:=round(Y1+Image1.Picture.Bitmap.Height*PointsY);
//Вывод изображения на печать
Printer.Canvas.CopyRect(Rect(X1,Y1,X2,Y2),Image1.Picture.Bitmap.Canvas,
Rect(0,0,Image1.Picture.Bitmap.Width,Image1.Picture.Bitmap.Height));
...
Printer.Canvas.Refresh;
//Получаю информацию о разрешении принтера
PointsX:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX)/70;
PointsY:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSY)/70;
//Расчитываю размеры изображения
X1:=round((Printer.PageWidth - Image1.Picture.Bitmap.Width*PointsX)/2);
Y1:=round((Printer.PageHeight - Image1.Picture.Bitmap.Height*PointsY)/2);
X2:=round(X1+Image1.Picture.Bitmap.Width*PointsX);
Y2:=round(Y1+Image1.Picture.Bitmap.Height*PointsY);
//Вывод изображения на печать
Printer.Canvas.CopyRect(Rect(X1,Y1,X2,Y2),Image1.Picture.Bitmap.Canvas,
Rect(0,0,Image1.Picture.Bitmap.Width,Image1.Picture.Bitmap.Height));
...
Переписал все ето дело под С++, вместо Image вставил PageControl, вроде все ОК, все работает, печатает, ошибок нету, однако картинку не печатает, то есть печать идет, все нормально, но из принтера почемуто вылазит пустой чистый лист. Незнаю че еще делать, в литературе копаться времени уже нету, методом научного тыка тестить прогу тоже времени нету, помогите пожалуста решить енту проблему.
Заранее благодарен!!!
Знакомая ситуация. Сам сталкивался:
http://forum.codenet.ru/showthread.php?t=26906&highlight=landscape
Решил переходом на печать из-под MS Office ( MS Word/ MS Excel ). Формируешь файл средствами OLE. Потом выводишь на печать!!
То что ты делаешь - гемор полный!! Столкнешься еще с кучей проблем, ИМХО!!