AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Werkzeuge Fastreport 2025.1 Chart wird nur verkleinert dargestellt
Thema durchsuchen
Ansicht
Themen-Optionen

Fastreport 2025.1 Chart wird nur verkleinert dargestellt

Ein Thema von norwegen60 · begonnen am 1. Apr 2025 · letzter Beitrag vom 24. Apr 2025
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
522 Beiträge
 
Delphi 12 Athens
 
#1

Fastreport 2025.1 Chart wird nur verkleinert dargestellt

  Alt 1. Apr 2025, 09:20
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
Miniaturansicht angehängter Grafiken
qkxjd9mwkf.jpg  
  Mit Zitat antworten Zitat
hotrs02

Registriert seit: 7. Apr 2022
42 Beiträge
 
#2

AW: Fastreport 2025.1 Chart wird nur verkleinert dargestellt

  Alt 2. Apr 2025, 10:09
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.
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
522 Beiträge
 
Delphi 12 Athens
 
#3

AW: Fastreport 2025.1 Chart wird nur verkleinert dargestellt

  Alt 23. Apr 2025, 20:58
Hallo Hotsr02,

leider hat mir die Antwort nicht weitergeholfen.

Wie gesagt arbeite ich mit Delphi XE und da habe ich die Befehle SetThreadDpiAwarenessContext und GetDpiForMonitor nicht gefunden.

Parallel habe ich versucht das Rechteck mal fix zu skalieren, aber auch das hat nicht geklappt. Ich habe dazu einfach Width und Heigth * 2 genommen.
lPictureView.Picture.Assign(FChart.TeeCreateMetafile(False, Rect(0, 0, Round(lPictureView.Width * 2), Round(lPictureView.Height * 2)))); Das dargestellte Chart war aber gleich klein wie zuvor.
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
522 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fastreport 2025.1 Chart wird nur verkleinert dargestellt

  Alt 23. Apr 2025, 21:48
Geschafft, wenn auch anders als gedacht.

Nachdem ich im Hauptformular die Unit XPMan eingebunden habe, war nichts weiter mehr nötig. Das Chart wird jetzt auch mit Skalierungsfaktor 225 korrekt (in voller Größe) angezeigt

Danke
Gerd
  Mit Zitat antworten Zitat
hotrs02

Registriert seit: 7. Apr 2022
42 Beiträge
 
#5

AW: Fastreport 2025.1 Chart wird nur verkleinert dargestellt

  Alt 24. Apr 2025, 08:44
Du wirst über die Einbindung der Unit XPMan die DPI Awareness deiner Anwendung beeinflussen. Je nachdem wie die Eigenschaft Scaled deiner Formulare gesetzt ist, hat dies Einfluss auf die Skalierung deiner Fenster.

Der von mir vorgeschlagene Ansatz ist halt unabhängig von einem eingebundenen Manifest / der DPI Awareness der Anwendung.
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
522 Beiträge
 
Delphi 12 Athens
 
#6

AW: Fastreport 2025.1 Chart wird nur verkleinert dargestellt

  Alt 24. Apr 2025, 11:50
Du wirst über die Einbindung der Unit XPMan die DPI Awareness deiner Anwendung beeinflussen. Je nachdem wie die Eigenschaft Scaled deiner Formulare gesetzt ist, hat dies Einfluss auf die Skalierung deiner Fenster.

Der von mir vorgeschlagene Ansatz ist halt unabhängig von einem eingebundenen Manifest / der DPI Awareness der Anwendung.
Habe mir die Fenster auf dem höher auflösenden Laptop angeschaut und keine Veränderungen festgestellt.
Das Problem ist, dass ohne Einbindung des Manifests die von mir gewählten Lösungen immer 100% angezeigt haben und die von dir erwähnten Befehle in XE nicht vorhanden sind. Deshalb kams erst zur Einbindung von XPMan. Die hat dann aber auch schon ausgereicht um das Problem zu lösen

siehe auch https://www.delphipraxis.net/217085-...ml#post1548207
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#7

AW: Fastreport 2025.1 Chart wird nur verkleinert dargestellt

  Alt 24. Apr 2025, 12:52
Wenn etwas in den mitgelieferten API-Aufrufen fehlt,

dann entweder etwas suchen, wo es enthalten ist.
* JCL
* WinMD
* oder so

oder es selbst implementieren
* in diesem Fall beim Hersteller nachsehn (auf der Webseite oder im Platform-SDK)
* im SDK suchen und das C++ nach Delphi übersetzen, oder die Definition im MSDN suchen und sich den Delphi-Aufruf entsprechend zusammenbauen

MSDN-Library durchsuchenSetThreadDpiAwarenessContext
MSDN-Library durchsuchenGetDpiForMonitor
https://learn.microsoft.com/de-de/wi...arenesscontext

Delphi XE, aus dem Jahr 2010, kann natürlich noch keine API kennen, welche erst im Jahre 2015 mit Windows 10 aufgetaucht ist.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (24. Apr 2025 um 12:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:00 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