您的位置:首页 > 编程语言

BCB 打印Panel代码

2016-02-25 15:57 162 查看
void PrintAsScreen( TCanvas *CanvasSource,TPrinter *Prntr,
TRect RectSource,TRect RectTarget)
{//所见即所得打印方式
Prntr->BeginDoc();
int OriginalMapMode = GetMapMode(Prntr->Handle);//当前影射模式
SetMapMode(Prntr->Handle,MM_ISOTROPIC);//设置图形影射模式
SIZE ss;
ss.cx = Screen->Width;
ss.cy = Screen->Height;
SetWindowExtEx( Prntr->Handle, ss.cx, ss.cy, ss);//设置窗口
//获取打印机x方向每英寸象素点数
float xLogPixelsPerInch = GetDeviceCaps(Prntr->Handle,LOGPIXELSX);
//获取y方向每英寸象素点数
float yLogPixelsPerInch = GetDeviceCaps(Prntr->Handle,LOGPIXELSY);

ss.cx = xLogPixelsPerInch;
ss.cy = yLogPixelsPerInch;
SetViewportExtEx(//设置视口
Prntr->Handle,
Screen->Width  * xLogPixelsPerInch/Screen->PixelsPerInch,
Screen->Height * yLogPixelsPerInch/Screen->PixelsPerInch,
&ss);
Prntr->Canvas->CopyRect(
RectTarget,     //Target Rect
CanvasSource,   //Source Canvas
RectSource );   //Source Rect
Prntr->EndDoc();
SetMapMode(Prntr->Handle,OriginalMapMode);//复原影射模式
}
void __fastcall TfrmStatusReport::btnPrintClick(TObject *Sender)
{
//打印panel部分
TPrinter *prt=Printer();
HDC dc=GetWindowDC(Panel1->Handle);
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->Width=Panel1->Width;
bmp->Height=Panel1->Height;
BitBlt(bmp->Canvas->Handle, 0, 0, Panel1->Width, Panel1->Height, dc, 0, 0, SRCCOPY);
//不做以下处理打印为空白//////////////////////////////////////////
TMemoryStream *pms=new  TMemoryStream();
bmp->SaveToStream(pms);
pms->Position=0;
bmp->LoadFromStream(pms);
delete pms;
//////////////////////////////////////////////////////

TRect rect = TRect(0,0,Panel1->ClientWidth,Panel1->ClientHeight);
PrintAsScreen(bmp->Canvas,prt,rect,rect);

delete bmp;
ReleaseDC(Panel1->Handle,dc);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: