TChart Range dynamisch anpassen

Rund um die LCL und andere Komponenten
Antworten
PhilmacFLy
Beiträge: 18
Registriert: Do 13. Dez 2012, 13:49

TChart Range dynamisch anpassen

Beitrag von PhilmacFLy »

Zu aller erst Cross post hier

Ich hab momentan folgendes Problem:
Ich bekomme Daten von der Seriel Schnitstelle und stelle diese dar, jetzt will ich aber nach möglichkeit nur die letzten 5-10 Minuten anzeigen.
Den Code den ich versucht habe:

Code: Alles auswählen

 
private
graphen: array of TLineSeries;   
 
...
 
graphen[Graph].AddXY(X, Y);
  log.Add(FormatDateTime('dd.mm.yyy hh:nn:ss', now) + ';' + floattostr(
    (X)) + ';' + IntToStr(Graph) + ';' + floattostr(y));
  chart1.BottomAxis.Range.Max := X;
  chart1.BottomAxis.Range.Min := X-30; 
Nur krieg ich da imemr eine SIGSEGV
Kann mir vllt jemand helfen

Benutzeravatar
theo
Beiträge: 10907
Registriert: Mo 11. Sep 2006, 19:01

Re: TChart Range dynamisch anpassen

Beitrag von theo »

Ich wäre echt erstaunt, wenn jemand aufgrund deines Codeschnippsels irgend etwas genaues dazu sagen könnte.
Schau mal ob alle Objekte "created" sind. Auch die TLineSeries im Array.

PhilmacFLy
Beiträge: 18
Registriert: Do 13. Dez 2012, 13:49

Re: TChart Range dynamisch anpassen

Beitrag von PhilmacFLy »

Sin sie habs geprüft.
Außerdem hab ich mal nur die Range sachen auskommentiert, dann läuft alles wunderbar, werst wenn ich die wieder einkommentier krachts.

Hier noch der code der die LineSeries erstellt

Code: Alles auswählen

 setlength(graphen, Anzahl);
  abstand := round((16777215) / Anzahl + 20);
  r := 0;
  g := 0;
  b := 0;
  c := 0;
  for i := 0 to high(graphen) do
  begin
    graphen[i] := TLineSeries.Create(Chart1);
    Chart1.AddSeries(graphen[i]);
    graphen[i].LinePen.Width := 2;
    c := c + abstand;
    tmp := inttohex(c, 6);
    r := StrToInt('$' + copy(tmp, 1, 2));
    g := StrToInt('$' + copy(tmp, 3, 2));
    b := StrToInt('$' + copy(tmp, 5, 2));
    graphen[i].LinePen.Color := RGB2TColor(r, g, b);
    ini := TInifile.Create(ExtractFilePath(ParamStr(0)) + 'gui.ini');
    try
      pagecount := ini.ReadInteger('Info', 'Anzahl', 0);
      j := 0;
      title := '';
      while (j <= pagecount) and (title = '') do
      begin
        labelcount := ini.ReadInteger('Page' + IntToStr(j), 'LabelAnzahl', 0);
        if i <= labelcount then
          title := ini.ReadString('Page' + IntToStr(j), 'Label' + IntToStr(i), '');
        Inc(j);
      end;
    finally
      ini.Free
    end;
    graphen[i].Title := title;
  end;       

wp_xyz
Beiträge: 5177
Registriert: Fr 8. Apr 2011, 09:01

Re: TChart Range dynamisch anpassen

Beitrag von wp_xyz »

Range ist die falsche Schraube - ist hilfreich, wenn mehrere Achsen dargestellt werden. Verwende stattdessen Chart.Extent.

PhilmacFLy
Beiträge: 18
Registriert: Do 13. Dez 2012, 13:49

Re: TChart Range dynamisch anpassen

Beitrag von PhilmacFLy »

Jo hab ich gestern dann nocht, selber Fehler.
Hab dann noch umgestellt das es nicht bei jeder Aktualisierung geändert wird, und dann hats funktioniert.

Antworten