delphi - Windows 字体大小设置为 : (125%, 150%) 或 dpi 大于 96 (120,144) 时,快速报告显示或打印报告不正确

标签 delphi scale font-size dpi quickreports

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

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

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

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

Image1

在任何地方打开或关闭“缩放”属性都不会影响此效果。

就像搞乱 PixelsPerInch 一样。

我所见过的唯一解决方案确实有所作为,

可以在 Quickreport 论坛中找到此链接:

QrPreview with UseDpiScaling under Windows7 ,

涉及创建一个新的项目 list 资源,并向其中添加以下行:

<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 字体大小如何,都按照设计的方式显示和打印

最佳答案

我找到了一个可行的解决方案! 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;

关于delphi - Windows 字体大小设置为 : (125%, 150%) 或 dpi 大于 96 (120,144) 时,快速报告显示或打印报告不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924614/

相关文章:

css - 将移动 dp 字体大小转换为桌面 px 值

iphone - uiwebview方向字体大小问题

delphi - 如何将带有 Alpha channel 的图像绘制到 TSpeedButton?

Delphi,使用vbscript连接ADO,new Be

android - 如何只显示位图的一部分——

html - 具有基于视口(viewport)高度的最大高度的元素。图像内应缩放并保持比例

css - 为什么2.8em除以1.2?

delphi - 在 FireMonkey 中更改 TMemo 的字体和背景颜色

delphi - IDE Insight 停止工作

c# - 如何根据旋转缩放图像