使用Windows字体大小设置错误地显示或打印报告的快速报告为:(125%,150%)或dpi大于96(120,144)

时间:2014-09-19 00:40:03

标签: delphi scale font-size dpi quickreports

这个问题众所周知,但我还没有找到解决方案。

每当窗口中的fon-size设置为高于正常大小

报告相对于纸张尺寸缩小,

并锚定到页面的左上角,如下所示:

Image1

切换"缩放"任何地方开启或关闭的财产都不会影响这一点。

正如搞乱PixelsPerInch。

我见过的唯一解决方案,实际上是做了什么,

可以在quickreport论坛中找到,在这个链接就在这里:

QrPreview with UseDpiScaling under Windows7

涉及创建新的项目清单资源,向其添加以下行:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
  </application>
</assembly>

然而,这样做的唯一方法是使报告中的文字更大,

报告保持在同一边界内,如下图所示:

Image2

可以做些什么?

我需要报告以适应论文的大小,

以与设计相同的方式显示和打印,无论Windows字体大小

1 个答案:

答案 0 :(得分:0)

我找到了一个有效的解决方案! QRPrntr.pas的补丁:

  procedure TQRPrinter.CreateMetafileCanvas;

  function scaleToNativeDeskRes(pVal: Integer): Integer;
  var
   tTemp: HDC;
  begin
    tTemp := GetDC(0);
    try
      Result := Round((pVal * GetDeviceCaps(tTemp, VERTRES)) / GetDeviceCaps(tTemp, DESKTOPVERTRES));
    finally
      ReleaseDC(0, tTemp);
    end;
  end;

begin
...
  FMetafile.Width := scaleToNativeDeskRes(XSize(PaperWidthValue));
  FMetafile.Height := scaleToNativeDeskRes(YSize(PaperLengthValue));
  FCanvas := TMetafileCanvas.Create(FMetafile, 0);
  FCanvas.Font.PixelsPerInch := MetafileDPI;
...
end;