つい最近、高 dpi システム (例: 解像度が 200 dpi を超える 4k 画面) に関して、印刷されたグラフィックが適切にスケーリングされていないというバグ レポートを受け取りました。
次のコードは状況を示しているはずです:
procedure TForm1.Button1Click(Sender : TObject);
var mf : TMetafile;
begin
Printer.BeginDoc;
mf := TMetafile.Create;
mf.SetSize(10, 10);
with TMetafileCanvas.Create(mf, 0) do
try
MoveTO(0, 0);
LineTo(10, 10);
finally
Free;
end;
Printer.Canvas.StretchDraw( Rect( 0, 0, Printer.PageWidth, Printer.PageHeight ), mf );
mf.Free;
Printer.EndDoc;
end;
このコードは、ページ全体で 10x10 のメタファイルを拡大する必要があります。これは、高 dpi システムでは失敗します。このコードは、Windows で Font/Item スケーリングが 100% に設定されていて、アプリケーションに dpi 対応であることを Windows に伝えるマニフェストがない場合に機能します。Delphi 2010 を使用しています。