Schnell melden 1920*1080 Auflösung plus 125% Wenn die oben genannte Anzeigeeinstellungsumgebung vorliegt,Der Anteil von „Vorschaudruck“ ist falsch.(zu groß oder zu klein),Aber der tatsächliche Druck ist normal.,Wenn Sie korrigieren möchten,Es ist notwendig, die Datei qrprntr.pas von Quick Report in der Kompilierungsumgebung zu ändern,Es gibt zwei Möglichkeiten, dies zu korrigieren。
◎ Dateispeicherort
C:\Programmdateien (x86)\EmbarcaderoStudio16.0Quickrep506qrprntr.pas
◎ Methode 1
Fügen Sie eine Funktion „scaleToNativeDeskRes“ hinzu, die von FMetafile.Width und FMetafile.Height aufgerufen werden soll。
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;
Das vollständige Beispiel lautet wie folgt
procedure TQRPrinter.CreateMetafileCanvas; // 解決 Windows 字型放大到 125% 以上時,預覽列印的比例會異常的問題。 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 := TMetafile.Create; // {$define HIRES} {$IFDEF HIRES} // try a high res canvas XFactor := GetDeviceCaps(aPrinter.Handle, LogPixelsX) / 254; YFactor := GetDeviceCaps(aPrinter.Handle, LogPixelsY) / 254; FMetafile.Width := XSize(PaperWidthValue); FMetafile.Height := YSize(PaperLengthValue); FCanvas := TMetafileCanvas.Create(FMetafile, aprinter.Handle); FCanvas.Font.PixelsPerInch := GetDeviceCaps(aprinter.Handle, LOGPIXELSY); {$ELSE} // dpi fix ? suggested by David Martin FMetafile.Width := scaleToNativeDeskRes(XSize(PaperWidthValue)); // add // 在此處調用 scaleToNativeDeskRes。 FMetafile.Height := scaleToNativeDeskRes(YSize(PaperLengthValue)); // add // 在此處調用 scaleToNativeDeskRes。 FCanvas := TMetafileCanvas.Create(FMetafile, 0); // add FCanvas.Free; // add if FMetafile.Width > XSize(PaperWidthValue) then // add FMetafile.Inch := (96 * FMetafile.Width) div XSize(PaperWidthValue); // add // end fix FMetafile.Width := XSize(PaperWidthValue); FMetafile.Height := YSize(PaperLengthValue); FCanvas := TMetafileCanvas.Create(FMetafile, 0); YFactor := Screen.PixelsPerInch / 254; XFactor := YFactor; SetGraphicsMode(FCanvas.handle, GM_ADVANCED); // disable this line {$ENDIF} // FHyperlinks := TList.Create; end;
◎Methode 2
Tatsächlich im Quick Report 5.06 In Version,Es wurde ein Fix bereitgestellt,Schreib weiter {$IFDEF-EINSTELLUNGEN} unter,Es ist nur so, dass das Programm nicht da ist {$Definieren Sie EINSTELLUNGEN} Definieren Sie, was eine hohe Auflösung ausmacht,Das Programm wird also nicht in das Korrekturprogramm hineinlaufen。
Daher besteht die zweite Methode darin, {$IFDEF-EINSTELLUNGEN} Verschieben Sie das Programm {$ANDERS} unter,Ersetzen Sie einfach die Originalschrift。
procedure TQRPrinter.CreateMetafileCanvas; begin FMetafile := TMetafile.Create; // {$define HIRES} {$IFDEF HIRES} {$ELSE} // try a high res canvas // 解決 Windows 字型放大到 125% 以上時,預覽列印的比例會異常的問題。 XFactor := GetDeviceCaps(aPrinter.Handle, LogPixelsX) / 254; YFactor := GetDeviceCaps(aPrinter.Handle, LogPixelsY) / 254; FMetafile.Width := XSize(PaperWidthValue); FMetafile.Height := YSize(PaperLengthValue); FCanvas := TMetafileCanvas.Create(FMetafile, aprinter.Handle); FCanvas.Font.PixelsPerInch := GetDeviceCaps(aprinter.Handle, LOGPIXELSY); // dpi fix ? suggested by David Martin FMetafile.Width := scaleToNativeDeskRes(XSize(PaperWidthValue)); // add FMetafile.Height := scaleToNativeDeskRes(YSize(PaperLengthValue)); // add FCanvas := TMetafileCanvas.Create(FMetafile, 0); // add FCanvas.Free; // add if FMetafile.Width > XSize(PaperWidthValue) then // add FMetafile.Inch := (96 * FMetafile.Width) div XSize(PaperWidthValue); // add // end fix FMetafile.Width := XSize(PaperWidthValue); FMetafile.Height := YSize(PaperLengthValue); FCanvas := TMetafileCanvas.Create(FMetafile, 0); YFactor := Screen.PixelsPerInch / 254; XFactor := YFactor; SetGraphicsMode(FCanvas.handle, GM_ADVANCED); // disable this line {$ENDIF} // FHyperlinks := TList.Create; end;
Referenz [link]
- delphi – Schneller Bericht zeigt oder druckt einen Bericht falsch mit Windows-Schriftgrößeneinstellung: (125%,150%) oder dpi größer als dann 96 (120,144) – Paketüberfluss
- Funktionsskalierungsproblem mit QuickReport – Club Delphi-Foren
- [Kurzer Bericht,QuickReport] Wenn Sie in Windows 10 die dpi auf 120 % oder 150 % einstellen, ist das Vorschaufenster etwa 2/3 so groß..
- QR komprimiert Zeichen in der Vorschau und im Druck – Club Delphi-Foren