Нашел
пример, приведенный
Devnvd, но там так же печатается пустая страница (C++ Builder 5.0, OS Windows XP Servise Pack 3):
HDC hdcPRN;
TRect r;
int cxPix,cyPix,csxPix,csyPix;
if(!PrintDialog1->Execute())return;
TPrinter *pPrinter = Printer();
//Далее растянем рисунок на страничку с сохранением
//пропорций
hdcPRN=pPrinter->Handle;
cxPix=GetDeviceCaps(hdcPRN,HORZRES);
cyPix=GetDeviceCaps(hdcPRN,VERTRES);
csxPix=GetDeviceCaps(Canvas->Handle,HORZRES);
csyPix=GetDeviceCaps(Canvas->Handle,VERTRES);
r.Left=0; r.Top=0;
r.Right=cxPix*ClientWidth/csxPix;
r.Bottom=r.Right*ClientHeight/ClientWidth;
if(r.Bottom >=cyPix)
{
r.Bottom=cyPix*ClientHeight/csyPix;
r.Right=r.Bottom*ClientWidth/ClientHeight;
}
pPrinter->BeginDoc(); //стартуем печать
//Получим картинку формы
Graphics::TBitmap *FormImage = GetFormImage();
//рисуем на принтер свою картинку
pPrinter->Canvas->StretchDraw(r,FormImage); //Если поставить вместо "FormImage" - "Image1->Picture->Graphic" - работет. В чем причина?
//Удаляем картинку
delete FormImage;
//Заканчиваем печать
pPrinter->EndDoc();