AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FastReport, Chart, Merkwürdigkeiten

Ein Thema von haentschman · begonnen am 6. Okt 2014 · letzter Beitrag vom 2. Dez 2020
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

FastReport, Chart, Merkwürdigkeiten

  Alt 6. Okt 2014, 13:16
Guten Morgen...

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

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
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.

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

Danke für Info´s
Miniaturansicht angehängter Grafiken
designer.jpg   property.png  
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: FastReport, Chart, Merkwürdigkeiten

  Alt 6. Okt 2014, 13:24
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:

Serie:= Chart.Chart.Series[I];
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

AW: FastReport, Chart, Merkwürdigkeiten

  Alt 6. Okt 2014, 13:51
Danke für die schnelle Antwort...
Zitat:
Warum nimmst du nicht gleich den Rückgabewert von AddSeries?
...weil es keinen gibt.

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);
Miniaturansicht angehängter Grafiken
serie.png  
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#4

AW: FastReport, Chart, Merkwürdigkeiten

  Alt 2. Dez 2020, 23:31
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;

Geändert von wschrabi ( 2. Dez 2020 um 23:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 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