用QuickReport作打印可以很方便地实现预览,用TPrinter该怎么预览?
解决方案 »
- URL启动delphi应用程序获取启动参数?
- cxgrid 合并单元格
- 如何使程序在不同的电脑中,体现一样的字体大小?
- 释放DLL时出错怎么解决啊?
- 变量定义在第三方控件里,我想换掉那个控件 但那个变量定义一定要,怎么办?
- required package vcl50 not found
- 表单名在变量FormName中,如何运行该表单呢?
- 如何处理这样的文本文件?
- 全局变量!!
- 如何动态的改变窗台名称。为什么我用条件语句DELPHI要我引用自身单元,引用后他又报不能引用?
- 关于adoQuery中的Parameters传递变量为DateTime型的问题?
- 关于String类型字符串的生存期问题,欢迎大家参与讨论。
PaintBox1.canvas.....
var i:Integer;
lbPrint:Tlabel;
s:Single;
begin
//s为打印机分辨率与屏幕分辨率的比例,设为常数4,在Epson C43UX上打出来刚好,但是其它分辨率的打印机肯定就有问题了,请问如何动态取得这个常数?下面这句没用,分子分母都是96
// s:=Printer.Canvas.Font.PixelsPerInch/Self.PixelsPerInch;
s:=4;
with Printer do
begin
Title:='test';
BeginDoc; for i:=0 to pnlPrint.ControlCount-1 do
begin
if pnlPrint.Controls[i].InheritsFrom(Tlabel) then
begin
lbPrint:=Tlabel(pnlPrint.Controls[i]);
Canvas.Font.Name=lbPrint.Font.Name;
Canvas.Font.Size:=lbPrint.Font.Size;
Canvas.TextOut(Round((pnlPrint.Left+lbPrint.Left) *s),Round((pnlPrint.Top+lbPrint.Top)*s),lbPrint.Caption);
end;
end;//for i EndDoc;
end;//with printer
end;
另外,Tprinter.Canvas.TextOut 是否按文本打印而不是按图形打的?也就是说,计算机传到打印机的数据是否为文字编码,而不是一点一点地传,如果是这样会快得多,但是就要求打印机本身要有字库,如某种字体没有了,又会发生什么?
aCanvas : TCanvas;
Procedure FormView(Canvas : Tcanvas)
begin
// 这里写入你的打印代码。
Canvas.handle := Handle;
end;