Быстрый отчет в 1920*1080 разрешение плюс 125% Когда указанная выше среда настройки дисплея,Пропорция «Предварительный просмотр печати» будет неправильной.(слишком большой или слишком маленький),Но фактическая печать нормальная.,Если вы хотите исправить,Необходимо изменить файл qrprntr.pas быстрого отчета в среде компиляции.,Есть два способа исправить это。
◎ Местоположение файла
C:\Программные файлы (x86)\EmbarcaderoStudio16.0Quickrep506qrprntr.pas
◎ Способ 1
Добавьте функцию ScaleToNativeDeskRes, которая будет вызываться FMetafile.Width и 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;
Полный пример выглядит следующим образом
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;
◎Метод 2
Фактически, в Кратком отчете 5.06 В версии,Исправление было предоставлено,написать на {$IFDEF нанимает} под,Просто программы там нет {$определить НАЙМ} Определите, что представляет собой высокое разрешение,Так программа не столкнется с программой коррекции。
Поэтому второй метод заключается в {$IFDEF нанимает} Переместите программу в {$ЕЩЕ} под,Просто замените исходное письмо。
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;
【參考連結】
- Delphi – Быстрый отчет отображает или печатает отчет неправильно с настройкой размера шрифта Windows.: (125%,150%) или dpi больше тогда 96 (120,144) – Переполнение стека
- Проблема масштабирования функции с помощью QuickReport – Форумы клуба Delphi
- [Быстрый отчет,быстрый отчет] Если вы установите разрешение 120% или 150% в Windows 10, окно предварительного просмотра будет составлять примерно 2/3 размера..
- QR сжимает символы при предварительном просмотре и печати – Форумы клуба Delphi