Einzelnen Beitrag anzeigen

norwegen60

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

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