你可以去看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;
这些是他们的比例换算方法,希望大家测试后公布一下比较好的方法。我是用的第一次发布的方法。