Laporan Cepat masuk 1920*1080 resolusi ditambah 125% Ketika lingkungan pengaturan tampilan di atas adalah,Proporsi "Pratinjau Cetak" akan salah.(terlalu besar atau terlalu kecil),Tapi pencetakan sebenarnya normal.,Jika Anda ingin memperbaiki,File qrprntr.pas dari Quick Report perlu diubah di lingkungan kompilasi,Ada dua cara untuk memperbaikinya。
◎ Lokasi berkas
C:\File program (x86)\EmbarcaderoStudio16.0Quickrep506qrprntr.pas
◎ Metode 1
Tambahkan Fungsi scaleToNativeDeskRes untuk dipanggil oleh FMetafile.Width dan 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;
Contoh lengkapnya adalah sebagai berikut
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;
◎Metode 2
Faktanya, di Laporan Cepat 5.06 Dalam versi,Perbaikan telah disediakan,menulis di {$PEKERJAAN IFDEF} dibawah,Hanya saja programnya tidak ada {$mendefinisikan PEKERJAAN} Tentukan apa yang dimaksud dengan resolusi tinggi,Sehingga program tersebut tidak akan berjalan ke dalam program koreksi。
Oleh karena itu, cara kedua adalah dengan {$PEKERJAAN IFDEF} Pindahkan program ke dalam {$KALAU TIDAK} dibawah,Ganti saja tulisan aslinya。
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;
[Tautan referensi]
- delphi – Laporan cepat menampilkan atau mencetak laporan secara tidak benar dengan pengaturan ukuran font windows: (125%,150%) atau dpi lebih besar dari itu 96 (120,144) – Stack Overflow
- Masalah penskalaan fungsi dengan QuickReport – Forum Klub Delphi
- [Laporan cepat,Laporan cepat] Jika Anda mengatur dpi ke 120% atau 150% di Windows 10, ukuran jendela pratinjau akan sekitar 2/3..
- QR memampatkan karakter dalam pratinjau dan pencetakan – Forum Klub Delphi