Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Fastreport 2025.1 Chart wird nur verkleinert dargestellt (https://www.delphipraxis.net/216975-fastreport-2025-1-chart-wird-nur-verkleinert-dargestellt.html)

norwegen60 1. Apr 2025 09:20

Fastreport 2025.1 Chart wird nur verkleinert dargestellt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen

ich bin aktuell dabei einige QuickReports auf FastReport umzustellen. Das Ganze unter Delphi XE
Dabei übertrage ich ein TChart mit
Delphi-Quellcode:
  lPictureView := TFrxPictureView(frpStandalone.FindObject('rpim03Chart'));
  if (lPictureView <> nil) and (FChart <> nil) then
      lPictureView.Picture.Assign(FChart.TeeCreateMetafile(False, Rect(0, 0, Round(lPictureView.Width), Round(lPictureView.Height))));
an den Report.
In meiner Entwicklungsumgebung mit Bidlschirmauflösung 1920 x 1200 wird der Chart im Report korrekt dargestellt
Drucke ich denselben Report auf einem Laptop mit 3840 x 2400, Skalierung 225% aus, ist der Chart stark verkleinert (s.Anhang)
Egal wie ich die Properties AutoSize, KeepAspectRatio und Stretched auch setze, das Problem bleibt

Hat jemand einen Lösungsansatz?

Grüße und Danke
Gerd

hotrs02 2. Apr 2025 10:09

AW: Fastreport 2025.1 Chart wird nur verkleinert dargestellt
 
Das Problem kommt mir bekannt vor. Wir verwenden eine auf TMetaFile-Instanzen basierende Druckvorschau und hatten diesbezüglich ebenfalls Probleme, dass eine mittels TChart.TeeCreateMetafile erzeugte TMetaFile-Instanz beim Einfügen falsch skaliert wurde, wenn die Bildschirmskalierung nicht auf 100% stand.

Ich habe als Lösung eine Routine erstellt, welche mir in Abhängigkeit der Bildschirmskalierung zwei Faktoren ermittelt, welche ich dann benutze, um das an TeeCreateMetafile übergebene Rechteck anzupassen.

Die Routine selber verwendet dazu einen Thread, welcher mittels SetThreadDpiAwarenessContext zunächst seine DPI Awareness auf per-Monitor V2 (DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) stellt, um unabhängig von der DPI Awareness des Hauptprogramms zu sein. Anschließend wird mittels GetDpiForMonitor die DPI des Monitors ermittelt. Das ganze ins Verhältnis zu 96 DPI gesetzt ergibt dann die oben genannten Faktoren.

Des weiteren setzen wir den ersten Parameter von TeeCreateMetafile auf True, um eine erweiterte ("enhanced") TMetaFile-Instanz zu erhalten. Ich weiß allerdings nicht, ob dies für das Problem relevant ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz