请问打印中纸张的毫米和设置中的点换算比例是多少?(100分)

  • 主题发起人 主题发起人 magicsh
  • 开始时间 开始时间
M

magicsh

Unregistered / Unconfirmed
GUEST, unregistred user!
请问打印中纸张的毫米和设置中的点换算比例是多少?
 

LogX := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
LogY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
可以达到,但是是 Number of pixels per logical inch, 要自己转换为 点/mm
 
好像是 1 英寸 = 2.54 mm
那应该是:
LogX := round(GetDeviceCaps(Printer.Handle, LOGPIXELSX)*2.54);
LogY := round(GetDeviceCaps(Printer.Handle, LOGPIXELSY)*2.54);
 
楼上的我记得不是1 英寸 = 2.54 mm,而是 1 英寸 = 25.4mm
 
PointsPerCM=28.35
 
kk2000:
不好意思,是我写错了,应该是25.4mm
 
pixx:=getdevicecaps(printer.Handle,LOGPIXELSX);
// X方向每inch的点数
pixy:=getdevicecaps(printer.Handle,LOGPIXELSY);
//y方向每inch的点数
mmpointx:=trunc(pixx*10/254);
//X方向每MM的点数
mmpointy:=trunc(pixy*10/254);
//Y方向每MM的点数
 
//沿打印机每英寸画布的象素总数 //打印机和屏幕的比例
ScaleX :=GetDeviceCaps(Handle,LogPixelsX) div PixelsPerInch;
ScaleY :=GetDeviceCaps(Handle,LogPixelsY) div PixelsPerInch;
你乘你的位置就是打印机的
 
你可以去看QuickReport的源代码
qrdPrinter : begin
XFactor := GetDeviceCaps(aPrinter.Handle, LogPixelsX) / 254;
YFactor := GetDeviceCaps(aPrinter.Handle, LogPixelsY) / 254;
end;

Resolution := Screen.PixelsPerInch;
function TQRUnitBase.LoadUnit(Value : extended;
aUnit : TQRUnit;
Horizontal : boolean): extended;
begin
case aUnit of
MM : result := Value / 10;
Inches : result := Value / 254.0;
Pixels : result := Value / (254 / Resolution) * Zoom / 100;
Characters : if Horizontal then
result := Value/CharWidth(abs(ParentReport.Font.Size)) / 10
else
result := Value/CharHeight(abs(ParentReport.Font.Size)) / 10;
else
result := Value;
end
end;

function TQRUnitBase.SaveUnit(Value : extended;
aUnit : TQRUnit;
Horizontal : boolean): extended;
begin
case aUnit of
MM : result := Value * 10;
Inches : result := Value * 254.0;
Pixels : result := Value * (254 / Resolution) / Zoom * 100;
Characters : if Horizontal then
result := Value * CharWidth(abs(ParentReport.Font.Size)) * 10
else
result := Value * CharHeight(abs(ParentReport.Font.Size)) * 10;
else
result := Value;
end;
end;

这些是他们的比例换算方法,希望大家测试后公布一下比较好的方法。我是用的第一次发布的方法。
 
楼主,这么不结贴?答案已经有了。
 
多人接受答案了。
 

Similar threads

回复
0
查看
804
不得闲
D
回复
0
查看
867
DelphiTeacher的专栏
D
后退
顶部