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