Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   FastReport, Chart, Merkwürdigkeiten (https://www.delphipraxis.net/182165-fastreport-chart-merkwuerdigkeiten.html)

haentschman 6. Okt 2014 12:16

FastReport, Chart, Merkwürdigkeiten
 
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Morgen...

nachdem ich das Wochenende kein Ergebnis produzieren konnte nehme ich eure Hilfe in Anspruch. :thumb:

Vorab:
Es ist nicht mein erster Chart mit TChart sowohl als VCL Komponente und auch im FR.

SOLL:
Dynamische Anzahl von Serien mit Werten aus jeweils einer generischen ObjectList. Ich habe mich für einen fertigen Report in einer frxChartview in einem Frame, statt der VCL Komponente, entschieden. Da muß beim Druck nicht extra der Report erzeugt werden und der Kunde sieht exakt das was auf dem Papier herauskommt.
IST:
1. Ein Hinzufügen von Werten mit AddXY ergibt kein Ergebnis. Selbst ein einfaches Add(1) tut nix...
2. Nur ein hinzufügen einer Liste von Werten in Chart.SeriesData[I].XValues / YValues erzeugt einen Chart... aber nur im Designer. Die Vorschau ist leer :gruebel:
3. Übergabe als DataSet soll nicht in Betracht gezogen werden.
4. Sind diverse Properties von außen nicht setzbar? (siehe Bild: X-Achse)(Serie.XValues.DateTime:= True; hat keine Auswirkung)

Bilder:
1. Auschnitt aus Designer mit übergebenen Daten und die Vorschau dazu (aus dem Designer gesartet) PS: Die normale Vorschau aus Delphi gestartet ist auch leer.
2. fehlende Property? Wo finde ich die? Steht Standardmäßig auf "Text"
Delphi-Quellcode:
procedure TPrint.CreateData;
var
  I,J: Integer;
  RecordData: TRecordData;
  CurrentParameter: TDeviceParameter;
  CurrentTimeFrom, CurrentTimeTo: TDateTime;
  Chart: TfrxChartView;
  CurrentSerieIndex: Integer;
  Serie: TChartSeries;

  procedure SetChartProperties;
  begin
    // spezielle nicht vom Kunden einstellbare Properties
    Chart.Chart.Visible:= FRecordDataList.Count > 0; // ohne Wirkung, nur aus Designer direkt :-(
    Chart.Chart.Legend.LegendStyle:= lsSeries;
    Chart.Chart.TopAxis.Visible:= False;
    Chart.Chart.BottomAxis.DateTimeFormat:= 'dd.mm.yyyy hh:nn:ss';
    Chart.Chart.BottomAxis.LabelsMultiLine := True;
    Chart.Chart.BottomAxis.LabelsAlternate:= True;
  end;

  procedure SetCurrentTime;
  begin
    CurrentTimeTo:= Now;
    case FProfile.TimeRangeType of
      trAll:
      begin
        CurrentTimeFrom:= -1;
        CurrentTimeTo:= -1;
      end;
      tr3mo:
      begin
        CurrentTimeFrom:= Now - 90;
      end;
      tr1mo:
      begin
        CurrentTimeFrom:= Now - 30;
      end;
      tr7d:
      begin
        CurrentTimeFrom:= Now - 7;
      end;
      tr24h:
      begin
        CurrentTimeFrom:= Now - 1;
      end;
      tr1h:
      begin
        CurrentTimeFrom:= Now - 0.041;
      end;
      tr30m:
      begin
        CurrentTimeFrom:= Now - 0.0205;
      end;
      trFixed:
      begin
        CurrentTimeFrom:= FProfile.TimeRangeFrom;
        CurrentTimeTo:= FProfile.TimeRangeTo;
      end;
    end;
  end;

begin
  Chart:= TfrxChartView(FReport.FindComponent('chtChart'));
  if Assigned(Chart) then
  begin
    FRecordDataList.Clear;
    SetCurrentTime;
    for I := 0 to FProfile.DeviceParameterList.Count - 1 do
    begin
      CurrentParameter:= FProfile.DeviceParameterList[I];
      // Chart
      Chart.AddSeries(csLine);
      Chart.SeriesData[I].DataType:= dtFixedData;
      // Daten
      FDatabase.GetList(FRecordDataList, CurrentParameter.ParameterID, CurrentTimeFrom, CurrentTimeTo);
      // Serie
      Serie:= Chart.Chart.Series[I];
      Serie.BeginUpdate;
      Serie.Title:= CurrentParameter.DeviceName + ' * ' + CurrentParameter.Name;
      if I = 0 then
      begin
        Serie.HorizAxis:= aTopAxis;
      end;
      Serie.XValues.DateTime:= True;
      Chart.SeriesData[I].XValues:= '';
      Chart.SeriesData[I].YValues:= '';
      for J:= 0 to FRecordDataList.Count - 1 do
      begin
        RecordData:= FRecordDataList[J];
        case CurrentParameter.ParameterType of
          ptAnalog:
          begin
            Chart.SeriesData[I].XValues:= Chart.SeriesData[I].XValues + DateTimeToStr(RecordData.RecordTime);
            Chart.SeriesData[I].YValues:= Chart.SeriesData[I].YValues + RecordData.Measure;
            if J < FRecordDataList.Count - 1 then
            begin
              Chart.SeriesData[I].XValues:= Chart.SeriesData[I].XValues + ';';
              Chart.SeriesData[I].YValues:= Chart.SeriesData[I].YValues + ';';
            end;
//            Serie.AddXY(RecordData.RecordTime, StrToFloatDef(RecordData.Measure, 0));
          end;
          ptDigital:
          begin
//            Serie.AddXY(RecordData.RecordTime, StrToIntDef(RecordData.Measure, 0));
          end;
        end;
      end;
      Serie.EndUpdate;
    end;
    SetChartProperties;
    frxGlobalVariables['Version']:= 'DIMOWA® - Visual Analyses Client ' + FPreferences.Common.Version;
    frxGlobalVariables['Titel']:= FProfile.MasterDeviceName + ' - ' + FProfile.NameLong;
  end;
end;
Haftungsausschluß:
Diese Quelltextunordnung könnte für eure Augen schmerzhaft sein... Ist dem Herumprobieren erst mal geschuldet. :P

Ist es möglich das der Frame dafür verantwortlich ist?

Danke für Info´s

Uwe Raabe 6. Okt 2014 12:24

AW: FastReport, Chart, Merkwürdigkeiten
 
Bist du sicher, daß die in dieser Zeile hinzugefügte Series auch die ist, die in der folgenden Zeile angesprochen wird?

Delphi-Quellcode:
Chart.AddSeries(csLine);
Chart.SeriesData[I].DataType:= dtFixedData;

Warum nimmst du nicht gleich den Rückgabewert von AddSeries?

Edit: Ich meine in dieser Zeile:

Delphi-Quellcode:
Serie:= Chart.Chart.Series[I];

haentschman 6. Okt 2014 12:51

AW: FastReport, Chart, Merkwürdigkeiten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die schnelle Antwort... :P
Zitat:

Warum nimmst du nicht gleich den Rückgabewert von AddSeries?
...weil es keinen gibt. :zwinker:

Delphi-Quellcode:
Serie:= Chart.Chart.Series[I];
...sollte korrekt sein. Ich habe den Serien mal Namen verpaßt entsprechend dem Index I. (Bild) Über das FixedData konnte ich es auch kontrollieren.
Delphi-Quellcode:
Serie:= Chart.Chart.Series[I];
Serie.Name:= 'Serie' + IntToStr(I);

wschrabi 2. Dez 2020 22:31

AW: FastReport, Chart, Merkwürdigkeiten
 
Hallo,
kann mir jdm sagen was da der Grund ist?
Ich hab genau so ein Problem. Es wird immer 0 ANgezeigt wobwohl ich YDatas manaell habe:
Delphi-Quellcode:
procedure Tform7.DrawRiskChartinFR(MyFRChart: TFrxChartView);
var
  Serie: TChartSeries;
  I: integer;
  Yval: string;
  id1,id2,id3,i1,i2,i3: double;

begin
  if Assigned(MyFRChart) then
  begin
   MyFRChart.Chart.Title.Text[0]:='RC';
   MyFRChart.Chart.Legend.LegendStyle:= lsSeries;
   Serie.BeginUpdate;
   for I := 0 to 1 do
     begin
      MyFRChart.AddSeries(csLine);
      MYFRChart.SeriesData[I].DataType:= dtFixedData;
     
      Serie:= MyFRChart.Chart.Series[I];
      if I = 1 then
         begin
         Serie.Title:= 'Normal';
         MyFRChart.SeriesData[I].XValues:= '1;2;3';
         id1:=RoundTo(Lipo9Satz.Idill1,-3);
         id2:=RoundTo(Lipo9Satz.Idill2,-3);
         id2:=RoundTo(Lipo9Satz.Idill3,-3);
         Yval:=format('%f;%f;%f',[13.2,34.4,5.66]);
         SHowMessage('Y-Vales: '+yval);
         MyFRChart.SeriesData[I].YValues:= Yval;
         end
      else
         begin
         Serie.Title:= 'Risk';
         MyFRChart.SeriesData[I].XValues:= '1;2;3';
         i1:=RoundTo(Lipo9Satz.Idill1,-3);
         i2:=RoundTo(Lipo9Satz.Idill2,-3);
         i2:=RoundTo(Lipo9Satz.Idill3,-3);
         Yval:=format('%f;%f;%f',[113.2,134.5,166.7]);
         SHowMessage('Y-Vales: '+yval);
         
         MyFRChart.SeriesData[I].YValues:= Yval;
         
         end;
     
     end;
   Serie.EndUpdate;
 
 
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz