+ -
当前位置:首页 → 问答吧 → 请教BCB6的RectCopy()函数.

请教BCB6的RectCopy()函数.

时间:2011-12-01

来源:互联网

请教BCB6的RectCopy()函数.
用BCB6写一个类似标签打印的程序,即把一张纸划分成几部分,每部分上打印相同内容。
首先想到的是RectCopy(), 结果发现如果目标是打印机的Canvas, 就什么也打不出来.
我试用《C++Builder精彩编程实例集锦》一书中, 实例134如何打印图像文件, 确实什么也打不出来.
实例134源程序中Rect设置有小错误, 我已经改正了. 改过的源程序如下:
  Printer()->BeginDoc(); //开始打印
  int PHeight=Printer()->PageHeight; //打印纸的Height
  int PWidth=Printer()->PageWidth; //打印纸的Width
  CenterX=PWidth/2;
  CenterY=PHeight/2;
  SDiv=2;//放大2倍打印
  X1=CenterX-(PWidth/(SDiv*2));
  Y1=CenterY-(PHeight/(SDiv*2));
  X2=CenterX+(PWidth/(SDiv*2));
  Y2=CenterY+(PHeight/(SDiv*2));
  PrnRect=Rect(X1,Y1,X2,Y2); //打印纸的Rect
  ImgRect=Rect(0,0,Image1->Width,Image1->Height); //屏幕的Rect
  Printer()->Canvas->CopyRect(PrnRect,Form1->Canvas,ImgRect); //这一句似乎完全不起作用
  Printer()->EndDoc(); //结束打印
谁能帮帮我啊? 先谢谢各位了!

作者: descriptor   发布时间: 2011-12-01

Form1->Canvas---你的这里是不是应该换成image1的画布,你是打印的图片呀。

作者: zzbinfo   发布时间: 2011-12-01

Printer()->Canvas->CopyRect(PrnRect,Image1->Canvas,ImgRect); //这一句似乎完全不起作用

作者: cankoo   发布时间: 2011-12-01

回复zzbinfo, 感到你说的非常有道理.
可是改为Image1->Canvas以后运行时出错
Can only modify an image if it contains a bitmap.

作者: descriptor   发布时间: 2011-12-01

Image中存放的是位图(Bitmap)时才有意义。

作者: ccrun   发布时间: 2011-12-01

感谢ccruu和zzbinfo
如果image1内放的是.BMP文件, 结果正确.
如果是.JPG文件, 运行时出错.
可是我必须处理.JPG文件, 有什么好办法吗?

作者: descriptor   发布时间: 2011-12-01

引用 5 楼 descriptor 的回复:
可是我必须处理.JPG文件, 有什么好办法吗?


很简单,如果载入的是jpg文件,用TBitmap对象Assign一下,然后再动态赋给Image就行了。

作者: ccrun   发布时间: 2011-12-01

先把JPG转成BMP吧,网上有一堆的组件可用

作者: zwd183335   发布时间: 2011-12-01

谢谢ccrun,我先试试.

作者: descriptor   发布时间: 2011-12-01