大图形打印问题!!!(200分)

  • 主题发起人 主题发起人 philips
  • 开始时间 开始时间
P

philips

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样打印大图(需要若干页打印纸)?
printer.begindoc;
printer.canvas.moveto(0,0);
printer.canvas.lineto(2000,20000);
printer.enddoc;

这段代码只能打印一页,其余的图形打不出,请大富翁的高手出手相助。
 
这个问题另外还有50分!
 
有人愿意帮助我吗?
 
大家是怎么做的?
 
200 分 没人要吗?
 
有,我,根据Delhi4提供的资料,大图形的显示和打印首两个因素的限制:
一是使用的操作系统,在一些早期的操作系统中,打印和显示的图形不能大于某固定
字节,大的部分会被删掉。二是使用的显卡和驱动程序,是一个主要的制约因素。这
都造成大图形的丢失。一个较好的解决办法是将大图形分割成几个小图形,然后用
BitBlt函数再依次拼凑起来!
 
补充,在分割完后,每打印一页要用NewDoc启动新的一页!
 
欧!不对,是NewPage.NewDoc是API函数下的
 
没有这方面的经验。。。
 
一点想法:
一、可以先打印在Bitmap.Canvas,不打印在Printer.Canvas上。
因为Printer不能象Bitmap一样可自己决定大小。
二、看来只能分块打印Bitmap了,打完再拼。
 
你这段代码怎么可能像word一样自动打印呢,
可以根据纸张大小,自己来切割,
然后根据切割的份数,循环你那段代码。
其实word里面也是这么干的。
 
only you 大侠 及 各位好汉,非常感谢!

我也曾试者将图形分为几页再打印,但没能成功,谁能发给我一个(打印一条长直

线,要连续,没有换页间隙)例子,这200分(另一贴还有50分)就归谁了。
 
用printersetup选择自定义的大纸张
 
const
ActualHeight=18800;
var
Hei,i,PageNum:Integer;
begin
Hei:=Printer.PageHeight;
PageNum:=Round(ActualHeight/Hei+0.5);
with Printer,Canvas do
for i:=0 to PageNum-1 do begin
BeginDoc;
MoveTo(0,-i*Hei);
LineTo(2200,ActualHeight-i*Hei);
EndDoc;
end;
end;

 
PiPi大侠:
你的 方法我试过了,只不过要受驱动程序限制,cr3240自定义纸张比较小,
而lq1600k的自定义纸张比较大(2米左右)。



JohnsonGuo 大侠:
你的 方法我试过了,只是我不清楚为什么
MoveTo(0,-i*Hei);
这一句要用:-i*Hei, 我 曾试过这这种方法,我用的是
moveto(0,0),
能否解释一下?
 
谢谢各位相助!
 
其实就是坐标平移罢了。
 
后退
顶部