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

 
Печать, из буфера обмена
Лена
Отправлено: 06.09.2006, 13:17


Мастер участка

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



Программа заносит в буфер обмена изображение bmp. Как из буфера обмена пустить это изображение на печать принтера?
К примеру в буфере находиться изображение bmp: высота изображения 457 пикселе (120 мм), ширина 526 пиксилей (140 мм), разрешение 96 dpi. Как его вывести на печать принтера? Надо чтобы печаталось и на реальный принтер и на виртуальный PDF, с сохранением размеров 120 мм на 140 мм.
Мой вариант такой:
CODE

void __fastcall TForm2::sButton2Click(TObject *Sender)
{
//код заносящий файл bmp в буфер обмена пропущен


TClipboard *pCB = Clipboard();
 if (pCB->HasFormat(CF_BITMAP))
 {
   Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
   try
   {
     pBitmap->LoadFromClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0);
     Printer()->BeginDoc();
     Printer()->Canvas->StretchDraw(Rect(200,200,2400,2400), pBitmap);
     Printer()->EndDoc();
   }
   catch (...)
   {
     sShowMessage("Нет");

   }
   delete pBitmap;
  }
}


1.Получаю при печати на реальный принтер нужное изображение, но пропорции слегка искажены.
Если написать Printer()->Canvas->StretchDraw(Rect(200,200, pBitmap->Width, pBitmap->Height), pBitmap); то получаю очень маленькое изображение на бумаге. Как правильно рассчитать ширину и высоту для ф-ции Rec вместо цифры 2400 т.е. получить реальные миллиметры как при печати из графической программы (120 на 140 мм)?

2. Из виртуального принтера PDF получаю чистую страницу. Наверное для виртуального принтера чего-то не хватает для установки его свойств?

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