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 1. Jun 2025
Antwort Antwort
norwegen60

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

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
Online

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

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
norwegen60

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

AW: Fastreport 2025.1 Chart wird nur verkleinert dargestellt

  Alt 18. Mai 2025, 10:15
Tja, irgendwie war das falsche Scaling plötzlich wieder da und trotz SVN-reverts bekam ich es nicht mehr hin, den Chart korrekt zu skalieren.

Jetzt habe ich es aber hoffentlich endgültig und ohne Anwendung von Manifests gelöst.
Ich habe zum Skalieren diese Funktion implementiert. Sie hat sich nach verschiedenen Builds und auf unterschiedlichen Rechnern bewährt:

Delphi-Quellcode:
procedure TForm1.AssignAndScaleChart(aPictureView: TFrxPictureView; aChart: TChart);
// *****************************************************************************************************************************************
// Chart in FR report auch bei Screen scaling > 100% korrekt skalieren
var
  rHeight, rWidth: Extended;
  rFactorHeight, rFactorWidth: Double;

begin
  // Erlaubte Größenparameter speichern
  rWidth := aPictureView.Width;
  rHeight := aPictureView.Height;

  // Autosize uns Autostretch zulassen und Chart laden
  aPictureView.Stretched := true;
  aPictureView.AutoSize := true;
  aPictureView.Picture.Assign(aChart.TeeCreateMetafile(true, Rect(0, 0, Round(aPictureView.Width), Round(aPictureView.Height))));

  FMsg := FMsg + Format('; PicViewStretch: %1.1f x %1.1f', [aPictureView.Width, aPictureView.Height]);

  // Factor ermitteln damit Chart in definierte Größenparameter passt
  rFactorWidth := rWidth / aPictureView.Width;
  rFactorHeight := rHeight / aPictureView.Height;

  FMsg := FMsg + Format('; Factor: %1.3f x %1.3f', [rFactorWidth, rFactorHeight]);

  // Autosize und AutoStretch abschalten
  aPictureView.AutoSize := false;
  aPictureView.Stretched := false;

  // PictureView an definierte Größe anpassen
  aPictureView.Width := aPictureView.Width * rFactorWidth;
  aPictureView.Height := aPictureView.Height * rFactorHeight;

  FMsg := FMsg + Format('; PicViewNew: %1.1f x %1.1f', [aPictureView.Width, aPictureView.Height]);
end;
Und der Aufruf erfolgt so:
Delphi-Quellcode:
procedure TForm1.btPrintClick(Sender: TObject);
// *****************************************************************************************************************************************
var
  lPictureView: TFrxPictureView;

begin
  // Assing the chart to the picture
  lPictureView := TFrxPictureView(frxReport1.FindObject('rpimChart'));
  FMsg := Format('PicViewOrg: %1.1f x %1.1f', [lPictureView.Width, lPictureView.Height]);

  AssignAndScaleChart(lPictureView, chChart);

  TFrxMemoView(frxReport1.FindObject('Memo2')).Text := FMsg;
  frxReport1.ShowReport;
end;
Das FMsg war nur zum Debuggen um die verschiedenen Width/Height zu sehen

Ergebnis siehe Anhang. Zur Darstellung der Größen habe ich den Rahmen des TfrxGroupHeader und des inneliegenden TFrxPictureView unterschiedlich gefärbt
Angehängte Grafiken
Dateityp: jpg K1n7H93fux.jpg (39,3 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
norwegen60

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

AW: Fastreport 2025.1 Chart wird nur verkleinert dargestellt

  Alt 1. Jun 2025, 07:55
Nachdem ich keinen Weg gefunden hatte TfrxChartView sicher zu verwenden bin ich dem Ratschlag gefolgt, generell ein virtuellen TChart zu erzeugen und den dann zu Assignen. Dabei habe ich festgestellt, dass diese Chart zu groß skaliert wurden. Nach etwas rumprobieren war die Lösung, AutoSize = False zu setzen. Damit funktioniert das Skaling jetzt mit in Forms eingebunden Chart und mit nur temporär erzeugten Charts


Delphi-Quellcode:
procedure TForm1.AssignAndScaleChart(aPictureView: TFrxPictureView; aChart: TChart);
// *****************************************************************************************************************************************
// Chart in FR report auch bei Screen scaling > 100% korrekt skalieren
var
  rHeight, rWidth: Extended;
  rFactorHeight, rFactorWidth: Double;

begin
  // Erlaubte Größenparameter speichern
  rWidth := aPictureView.Width;
  rHeight := aPictureView.Height;

  // Autosize uns Autostretch zulassen und Chart laden
  aPictureView.Stretched := true;
  aPictureView.AutoSize := false;
  aPictureView.Picture.Assign(aChart.TeeCreateMetafile(true, Rect(0, 0, Round(aPictureView.Width), Round(aPictureView.Height))));

  FMsg := FMsg + Format('; PicViewStretch: %1.1f x %1.1f', [aPictureView.Width, aPictureView.Height]);

  // Factor ermitteln damit Chart in definierte Größenparameter passt
  rFactorWidth := rWidth / aPictureView.Width;
  rFactorHeight := rHeight / aPictureView.Height;

  FMsg := FMsg + Format('; Factor: %1.3f x %1.3f', [rFactorWidth, rFactorHeight]);

  // Autosize abschalten
  aPictureView.Stretched := false;

  // PictureView an definierte Größe anpassen
  aPictureView.Width := aPictureView.Width * rFactorWidth;
  aPictureView.Height := aPictureView.Height * rFactorHeight;

  FMsg := FMsg + Format('; PicViewNew: %1.1f x %1.1f', [aPictureView.Width, aPictureView.Height]);
end;
  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 15:48 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