2014-09-19 102 views
2

此問題衆所周知,但我還沒有找到解決方案。使用windows字體大小設置錯誤地顯示或打印報告的快速報告是:(125%,150%)或dpi大於96(120,144)

每當FON尺寸的窗口設置爲高於正常大小

報告收縮相對於紙張尺寸,

和被掛靠到像這樣的頁面的左上角:

Image1

Swiching的「縮放」屬性或關閉任何地方不會影響這一點。

正在與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> 

然而,唯一能做的是mak Ë文在報告中較大的,

而報告保持不變boundries內,如下圖所示:

Image2

什麼能關於做什麼?

我需要的報告以適應紙張大小,

顯示和打印它的設計以同樣的方式,無論Windows字體大小的

+0

事實上,整個VCL都有問題適當地擴展到這些DPI設置。我甚至看到,當這種情況發生變化時,微軟軟件本身顯得非常糟糕。來自我們客戶的最常見的投訴之一。我們總是告訴他們,設置應始終保持在100%,並且Microsoft不應該首先提供此選項。 – 2014-09-19 00:50:44

+0

我對QR和大字體沒有任何問題,因爲打印機字體與屏幕字體無關。 QR確實將預覽打印到屏幕上顯示的圖元文件中,但是在使用Delphi和Windows 7進行設計,預覽或使用Windows屏幕字體大小進行打印時,使用各種應用程序,報告和50個用戶,擁有20多種應用程序中的各種字體,DPI和屏幕分辨率設置以及大約1000個報告。 – 2014-09-19 03:01:03

+0

@Jerry字體縮放對於高像素密度屏幕非常重要。這些現在很普遍。做對不難。 – 2014-09-19 03:46:06

回答

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;