预览和打印之间的尺寸比例问题(50分)

  • 主题发起人 主题发起人 lylydark
  • 开始时间 开始时间
L

lylydark

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个可以打印和预览的activex控件,可是通过printer的canvas在A4纸上打印出来的内容和在image的canvas上画出来的预览内容如何显示比例正确呢?
比如我要在纸上某个位置(50,50)打印一行字,在image预览的时候也保持相应的位置(image控件是在activeform上的),但是它的位置应该不是(50,50)了吧?那应该是什么呢?存在怎样的比例关系呢?
我把程序贴出来,大家可以看得清楚一些
首先是在特定位置打印文字的程序,参数X,Y是输入的坐标值,Txt是文字内容:
procedure PrintText(X, Y: Extended;
Txt: string;
FontName: string;
FontSize: Integer);
var Px, Py: Integer;
begin
Px := Round(Round(X * HPointsPerInch * 10000 / 25.4) / 10000);
Py := Round(Round(Y * VPointsPerInch * 10000 / 25.4) / 10000);
Py := Py + (60-GetOffSetY);
Printer.Canvas.Font.Name := FontName;
Printer.Canvas.Font.Size := FontSize;
Printer.Canvas.TextOut(Px, Py, Txt);
end;

其中的HPointsPerInch为水平方向每英寸打印机的点数,YPointsPerInch为纵向方向每英寸打印机的光栅数
function VPointsPerInch: Integer;
begin
Result := GetDeviceCaps(Printer.Handle, LOGPIXELSY)
end;

function HPointsPerInch: Integer;
begin
Result := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
end;

我要问的就是预览的时候参数X,Y要做何比例处理,即下面程序中的问号处该如何写?谢谢
procedure TPrtActiveX.PrintTextPre(X, Y: Extended;
Txt: string;
FontName: string;
FontSize: Integer);
var Px, Py: Integer;
begin
Px:=????????
Py:=????????
Image1.Canvas.Font.Name := FontName;
Image1.Canvas.Font.Size := FontSize;
Image1.Canvas.TextOut(Px, Py, Txt);
end;
 
预览的时候参数当然还是按屏幕实际了。
 
“按屏幕实际”是什么意思呢?
 
后退
顶部