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;