如何预览由Printer.Canvas.TextOut产生的报表(60分)

  • 主题发起人 主题发起人 GaryLou
  • 开始时间 开始时间
把Printer.canvas换成Form.Canvas就可以显示出来了
 
可以建一个PICTUREBOX, 然后TEXTOUT到此PICTUREBOX上, 好处是比FORM灵活.
 
如果用Form.Canvas的方法,当页数超过两页时,画面如何处理.
PICTUREBOX是哪个构件的.
能否附上具体作法.
 
用TPaintBox的Canvas代替,设置映射模式还可实现无级缩放显示
 
呵呵,打错, 是PAINTBOX :-)
 
Use PaintBox, Image and StringList , StringList contain MetaFiles
One page is a MetaFile, Use stringlist to manage,
Canvas :=TMetaFileCanvas.Create(MetaFile, 0)
Use Canvas to TextOut Data
Image.Picture :=MetaFile
.....
 
用TMetafileCanvas是对的,但Image,StringList就不必了。
生面页面时用一个TList容器装载每个页面的TMetafileCanvas,在模拟显示时
用每个TMetafileCanvas去刷新TForm中PaintBox的Canvas就行了;在打印时
再用每个TMetafileCanvas去刷新Printer的Canvas就行了。不过,
TControlCanvas, TMetafileCanvas, TPrintCanvas有些不兼容。可以强制转
换成TCanvas,如:
TCanvas(Self.Canvas).Assign(TCanvas(Pages));
这里Pages是TList类。
 
也可以用Image组件,把Printer.Canvas换成Image.Canvas。
如果再计算一下Image的尺寸和Printer的PageHeight、PageWidth之间的关系,指定
合适的字体大小,还可以实现'所见即所得'的效果。当然,还要考虑屏幕分辨率和打
印机分辨率之间的关系。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
941
DelphiTeacher的专栏
D
D
回复
0
查看
880
DelphiTeacher的专栏
D
D
回复
0
查看
956
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
后退
顶部