Rapport rapide dans 1920*1080 résolution plus 125% Lorsque l'environnement de réglage de l'affichage ci-dessus est,La proportion de « Aperçu avant impression » sera incorrecte.(trop grand ou trop petit),Mais l'impression réelle est normale.,Si vous voulez corriger,Il est nécessaire de modifier le fichier qrprntr.pas de Quick Report dans l'environnement de compilation,Il y a deux façons de le corriger。

◎ Emplacement du fichier
C:\Fichiers de programme (x86)\EmbarcaderoStudio16.0Quickrep506qrprntr.pas
◎ Méthode 1
Ajoutez une fonction scaleToNativeDeskRes à appeler par FMetafile.Width et FMetafile.Height。
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 ; |
L'exemple complet est le suivant
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 ; |
◎Méthode 2
En fait, dans Quick Report 5.06 En version,Un correctif a été fourni,écrire sur {$L'IFDEF EMBAUCHE} sous,C'est juste que le programme n'est pas là {$définir les embauches} Définir ce qui constitue la haute résolution,Ainsi, le programme ne fonctionnera pas dans le programme de correction。
La deuxième méthode consiste donc à {$L'IFDEF EMBAUCHE} Déplacez le programme dans {$AUTRE} sous,Remplacez simplement l'écriture originale。
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 ; |
Référence [lien]
- Delphes – L'affichage ou l'impression incorrecte d'un rapport rapide avec le paramètre de taille de police Windows est: (125%,150%) ou dpi plus grand alors 96 (120,144) – Stack Overflow
- Problème de mise à l'échelle des fonctions avec QuickReport – Forums du Club Delphi
- [Rapport rapide,rapport rapide] Si vous définissez le dpi sur 120 % ou 150 % dans Windows 10, la fenêtre d'aperçu fera environ les 2/3 de sa taille..
- QR compresse les caractères en aperçu et en impression – Forums du Club Delphi