Как TBitmap преобразовать в TGraphic в С++ Builder
От: stuff_pkb  
Дата: 13.03.10 08:00
Оценка:
Этот код выводит пустую страницу:

if (dlgPrint->Execute()) 
{ 
TPrinter *Prntr=Printer(); 
Prntr->BeginDoc(); 
Prntr->Canvas->Draw(0,0,(TGraphic*)GetFormImage()); 
Prntr->EndDoc(); 
}
Re: Как TBitmap преобразовать в TGraphic в С++ Builder
От: stuff_pkb  
Дата: 13.03.10 09:20
Оценка:
Этот код так же печатает пустую страницу:

  if (dlgPrint->Execute())
  {
     TPrinter *Prntr=Printer();
     Prntr->BeginDoc();

     Image2->Picture->Assign(GetFormImage());
     Prntr->Canvas->Draw(0,0,Image2->Picture->Graphic);

     Prntr->EndDoc();
  }
Re[2]: Как TBitmap преобразовать в TGraphic в С++ Builder
От: stuff_pkb  
Дата: 13.03.10 09:49
Оценка:
Этот код работает , печатает форму!:

  if (dlgPrint->Execute())
  {
     TPrinter *Prntr=Printer();
     Prntr->BeginDoc();
     Form1->PaintTo(Prntr->Handle, 0, 0);
     Prntr->EndDoc();
  }


Но непонятно, как картинку формы растягивать на весь лист?
Re[3]: Как TBitmap преобразовать в TGraphic в С++ Builder
От: stuff_pkb  
Дата: 13.03.10 13:22
Оценка:
Нашел пример, приведенный 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();
Re[4]: Как TBitmap преобразовать в TGraphic в С++ Builder
От: stuff_pkb  
Дата: 13.03.10 18:39
Оценка:
Интерсно, что BitBlt работате, а StretchBlt нет.

//BitBlt - работает
BitBlt(Prntr->Canvas->Handle, 0, 0,Form1->Width, Form1->Height, GetWindowDC(Form1->Handle), 0, 0, SRCCOPY);

//StretchBlt - не работает
StretchBlt(Prntr->Canvas->Handle,0,0,1024,768,GetWindowDC(Form1->Handle),0,0,Form1->ClientWidth,Form1->ClientHeight,SRCCOPY);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.