图形打印问题,估计是D5的Bug(200分)

  • 主题发起人 主题发起人 Avenir
  • 开始时间 开始时间
A

Avenir

Unregistered / Unconfirmed
GUEST, unregistred user!
用D5打印图形
Printer.BeginDoc;
Printer.Canvas.StretchDraw(ARect,Image.Picture.Bitmap);
Printer.EndDoc;

头大了
有时能打出图片,有打不出,随机行很大,没有规律
谁解决了,分再加
 
怎样看帖子?
 
可能是打印机问题,换台试试
 
90%是D5的问题,
有可能试一试看看就知道了
可能跟Canvas的锁定有关,但锁定了Canvas也没用
 
是不是d5的bug换个版本就知道了
 
换版本也算是答案?
拜托喜欢深入研究的大虾帮一忙
 
又有一个D6的例子吗,你要不要?
 
Boland文档里说:
Note:Delphi canvases use device-dependent bitmaps to implement the Draw, StretchDraw, or CopyRect methods. Because of this, you can’t use these methods with most printers. Instead, to create graphic images on the printer’s canvas, create a device-independent bitmap and draw it directly to the canvas’s Handle property.

所以呢,最好照着他们说的,创建一个device-independent bitmap and draw it directly to the canvas’s Handle 。 尺寸大小要自己算了。
 
用api StretchBlt试试看。
 
IMAGE.picture中装的一定是BMP图吗?
 
上面几句话执行的时候,
Image里是同样的图片,打印机是同样的打印机
但不知什么时候能打出来,什么时候打不出来。
所以打印机和Image是没问题,问题在于StretchDraw的实现中,肯定存在某些问题

想知道的就是问题在什么地方,
能告诉我怎么用API实现也可以
 
如果你的Image装的是jpeg或者其他非bmp图片,那就不行,最好使用
Printer.Canvas.StretchDraw(ARect,Image.Picture.Graphic);
适用于所有图片格式
另外你的ARect是正确的吗
 
如果你的Image装的是jpeg或者其他非bmp图片,那就不行,最好使用
Printer.Canvas.StretchDraw(ARect,Image.Picture.Graphic);
适用于所有图片格式
另外你的ARect是正确的吗
StretchDraw没问题,类似的东西恰好前几个星期我用过了,就是d5
 
可能是你的打印机问题,我这里试过没有任何问题呀!(D5,WINME,IBM NP17)
 
Pipi.
我写错了,我用的是
Printer.Canvas.StretchDraw(ARect,Image.Picture.Graphic);
写成Bitmap是提问时疏忽

ARect,打印机,还有 Image应该都没问题
问题在于StretchDraw,或者我突然想到是不是我的系统有问题

等我到现场看看是不是我的系统有问题了
几点补充
Printer.Canvas.StretchDraw(ARect,Image.Picture.Graphic);
Printer.Canvas.StretchDraw(ARect,Image.Picture.Graphic);
连续来两次,成功率提高,但还达不到100%

Printer.Canvas.StretchDraw(ARect,Image.Picture.Graphic);
Printer.Canvas.StretchDraw(ARect,Image.Picture.Graphic);
Printer.Canvas.StretchDraw(ARect,Image.Picture.Graphic);
连续来三次,会报非法访问
Printer.Canvas.StretchDraw(ARect,nil);
Printer.Canvas.StretchDraw(ARect,Image.Picture.Graphic);
这样,成功率也提高,能不能达到100%还不清楚

 
应该是你的系统的问题,CANVAS.strechdraw这个方法,是调用了TGRAPHIC的DRAW虚方法,实际上如果你的图片是BITMAP的话,是调用了TBITMAT的DRAW方法,而TBITMAP的DRAW方法中用的都是WINAPI函数,应该不会有问题,你可查一下看看,我没有具体仔细去看。
 
要不然就是打印机的驱动程序有问题
你换一种别的打印机试试如何
CANVAS.strechdraw绝对没问题,我又看了我的程序,一点问题都没有

 
看看Form的VCL代码,里面有Form的print方法,照他们的方法去打图试试看。
 
请在其他地方找原因吧。
 
后退
顶部