Hast Du schon mal versucht erst ein PrepareReport anzustoßen und dann anzuzeigen?
Delphi-Quellcode:
frxReport2.PrepareReport;
frxReport2.ShowReport;
Das hat leider auch nicht geholfen.
Bei mir hat das auch nie wirklich funktioniert, wir gehen stattdessen hin, rendern den TeeChart in eine Vektorgrafik und packen diese dann auf den FastReport.
Meinst du per
lPictureView.Picture.Assign(chChart.TeeCreateMetafile(False, Rect(0, 0, Round(lPictureView.Width), Round(lPictureView.Height))));
?
Das habe ich bis jetzt mit den einfachen Reports, wo das Chart schon im Delphi-Form angezeigt wird, auch so gemacht. Jetzt wollte ich aber einen Report aus vielen Seiten erzeugen wo die Charts auf der Delphi-Seite gar nicht existieren, bzw. verschiedene Views aufgerufen werden müssen. In QuickReport war es problemlos möglich den QR-Chart an dieselbe Funktion zu schicken, wie wenn ich ihn für den Delphi-View erzeuge und eigentlich hatte ich irgendwo gelesen, dass auch hinter dem frxChartView.Chart der TeeChart steckt. Aber irgendwie wohl nicht so wirklich.
Vielleicht ist es wirklich die beste Idee, ich erzeuge auch für den langen Report immer ein TeeChart und Assigne dann wie oben beschrieben.
Beim Picture.Assigen muss man aber noch beachte, dass zumindest bei mir (Delphi XE), das Scaling auch nicht funktioniert hat wenn das Windows Screen scaling <> 100% war. Ich assigne deshalb so
Delphi-Quellcode:
procedure AssignAndScaleChart(aPictureView: TFrxPictureView; aChart: TChart);
// *******************************************
// Printout of a Chart was not correct scaled, if screen scaling was bigger than 100%. Here Chart will be scaled correct
var
rHeight, rWidth: Extended;
begin
// Save defined sizes
rHeight := aPictureView.Height;
rWidth := aPictureView.Width;
// allow Autosize und Stretch and assign chart
aPictureView.Stretched := true;
aPictureView.AutoSize := true;
aPictureView.Picture.Assign(aChart.TeeCreateMetafile(True, Rect(0, 0, Round(aPictureView.Width), Round(aPictureView.Height))));
// deactivate Autosize und Stretch
aPictureView.AutoSize := False;
aPictureView.Stretched := False;
// set PictureView to originally defined sizes
aPictureView.Height := rHeight; //aPictureView.Height * rFactorHeight;
aPictureView.Width := rWidth; //aPictureView.Width * rFactorWidth;
end;