Einzelnen Beitrag anzeigen

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