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