"डेल्फ़ी" त्वरित रिपोर्ट पूर्वावलोकन मुद्रण की अनुपात समस्या को ठीक करता है

त्वरित रिपोर्ट 1920*1080 संकल्प प्लस 125% जब उपरोक्त डिस्प्ले सेटिंग वातावरण होता है,"पूर्वावलोकन प्रिंट" का अनुपात गलत होगा.(बहुत बड़ा या बहुत छोटा),लेकिन वास्तविक मुद्रण सामान्य है.,अगर आप सही करना चाहते हैं,संकलन परिवेश में त्वरित रिपोर्ट की qrprntr.pas फ़ाइल को संशोधित करना आवश्यक है,इसे ठीक करने के दो तरीके हैं。

 

◎ फ़ाइल स्थान
सी:\कार्यक्रम फाइलें (86)\EmbarcaderoStudio16.0Quickrep506qrprntr.pas

 

◎ विधि 1
FMetafile.Width और FMetafile.Height द्वारा कॉल किए जाने के लिए एकscaleToNativeDeskRes फ़ंक्शन जोड़ें。

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;

 

संदर्भ [कड़ी]

एक टिप्पणी छोड़ दो

कृपया ध्यान दें: टिप्पणी मॉडरेशन सक्षम है और अपनी टिप्पणी में देरी हो सकती है. कोई जरूरत नहीं अपनी टिप्पणी को पुनः सबमिट करने की आवश्यकता है.