Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FastReport und Charts (https://www.delphipraxis.net/98219-fastreport-und-charts.html)

FBrust 23. Aug 2007 11:22


FastReport und Charts
 
Hallo,

ich bin gerade dabei, einen Report, der mehrere Charts enthält, von QR (dem von D7) nach FastReport 4.3 zu übertragen.

Eins der Charts hat horizontale Balken, deren Farbe je nach ihrem Wert dargestellt wird (als eine Art Ampelsystem). Zu diesem Zweck wird die Farbe in der zugrunde liegenden Tabelle bei der Berechnung der Werte ermittelt und dann abgespeichert.

Im QuickReport-Formular lief dann folgendes ab:

Delphi-Quellcode:
      Series2 := QRChart5.Chart.SeriesList.Series[0];
      Series2.ColorEachPoint := False;
      Series2.Clear;

      with dmReport.tblQRep5a do begin
        Open;
        while not Eof do begin
          colbar2 := StringToColor(FieldbyName('strColor').AsString);
          Series2.Add(FieldbyName('dblValue').AsFloat,
                                     FieldbyName('strName').AsString, colbar2);
          Next;
        end;
      end;
Das funktionierte auch wunderbar.

Für den FastReport-Bericht sieht das ganze so aus:

Delphi-Quellcode:
      with dmFB.qryGetRecordList do begin
        SQL.Text := 'SELECT * FROM QREP_4';
        Open;
        while not eof do begin
          clChart := StringToColor(FieldbyName('STRCOLOR').AsString);
          frChart.Chart.Series[0].Add(FieldbyName('DBLVALUE').AsFloat,
            FieldbyName('STRGRPNAME').AsString, clChart);
          Next;
        end;
        Close;
      end;
      frxReport1.Loadfromfile('qreport.fr3');
      frxReport1.ShowReport;
Und da passiert....nichts. Der Bericht wird zwar angezeigt, aber: Wenn ich im FastReport als Datenquelle für die Serie ein TfrxDBDataset einstelle, werden die Daten aus dieser Datenquelle dargestellt und die Farbe ist für alle gleich (nämlich die voreingestellte), wenn ich "Fixe Daten" auswähle, bleibt das Chart leer.

Wenn ich mit F8 durch den obigen Quelltext gehe, wird auch jede Zeile brav abgearbeitet, aber es wird nichts in Chart eingetragen :cry:

Ich habe auch festgestellt, dass die "Add"-Funktion für eine Serie auch dann nicht ausgeführt wird, wenn sie direkt im Script-Editor im OnBeforePrint-Ereignis ausgeführt wird, oder hab ich da was übersehen?

Hat vielleicht jemand eine Idee, was ich noch probieren könnte?


Gruß
Frank

Shivan 23. Aug 2007 12:21

Re: FastReport und Charts
 
Hi,

Charts mit anderen Farben in FastReport sind nicht so einfach.

1. wird programmatisch immer clTeeColor verwendet (wenn du dir mal frxChartHelpers.pas anschaust)
2. Funktioniert die Add Routine auch irgendwie nicht so richtig bzw. wir haben es auch nicht hinbekommen.

Ich habe den Kollegen bei FastReport folgendes als Vorschlag gegeben, da dies somit zumindest erlaubt in v4 die Farbe zu hinterlegen.

Delphi-Quellcode:
procedure TfrxStdSeriesHelper.AddValues(Series: TChartSeries; const v1, v2,
  v3, v4, v5, v6: String; XType: TfrxSeriesXType);
var
  d: Double;
  s: String;
  c: TColor;
begin
  d := 0;
  if Series.YValues.DateTime then
   d := StrToDateTime(v2)
  else if frxIsValidFloat(v2) then
   d := frxStrToFloat(v2);
  if v3 <> '' then
   s := v3
  else
   s := v1;

  //ab hier der neue Code...
  c := clTeeColor;
  if v4 <> '' then
  try
   c := StringToColor(v4);
  except
  end;

  case XType of
   xtText:
     Series.Add(d, v1, c);
   xtNumber:
     Series.AddXY(frxStrToFloat(s), d, v1, c);
   xtDate:
     Series.AddXY(StrToDateTime(s), d, v1, c);
  end;
end;

Per FastScript im Report geht das dann bspw. so:
Delphi-Quellcode:
myChart.SeriesData[0].Source1 := 'Bez1;Bez2;Bez3';
myChart.SeriesData[0].Source2 := '8;5;2';
myChart.SeriesData[0].Source3 := '1;2;4';
myChart.SeriesData[0].Source4 := 'clRed;clLime;clGreen';
Allerdings nur mit dem Typ "fixe Daten".

Für Farbe aus der Datenbank bräuchte man noch im frxChartEditor.pas eine neue Combobox (respektive für Source4)

Schreib doch auch denen im Online-Support-Form ein neues Ticket... dann kommts vielleicht schneller rein.....

Ich hab als Antwort bekommen:
>>Thanks.
>>We take into consideration your suggestion.

Wenn du übrigens im FastReport-Forum nach "Chart" suchst, findest du auch div. Varianten wie andere User weitere Features der TeeChart in FastScript & Co freigeschaltet haben.

Gruß

Shivan

FBrust 23. Aug 2007 12:35

Re: FastReport und Charts
 
Hallo Shivan,

danke für Deine Antwort.

Ich werde mal den entsprechende Code einbauen, die Strings kann ich mir auch zur Laufzeit zusammenbauen...evtl. muss ich sie als Variable übergeben...hoffentlich funktioniert wenigstens das :roll:

Und das mit dem Ticket mach ich auf jeden Fall.


Gruß
Frank

FBrust 5. Sep 2007 15:31

Re: FastReport und Charts
 
Hallo Shivan,

falls es Dich noch interessiert:

Ab Version 4.3.50 ist die Möglichkeit drin, ein Datenbankfeld (String) für die Farbe anzugeben (Ticket hat geholfen :thumb: ).


Gruß
Frank

Shivan 6. Sep 2007 06:14

Re: FastReport und Charts
 
Cool! Na also! :))

Geht doch...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 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