Rolliernendes Diagramm mit TAChart [gelöst]

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Rolliernendes Diagramm mit TAChart [gelöst]

Beitrag von corpsman »

Hallo Zusammen,
ich bastle gerade ein Programm, welches für mich Dateien Kopiert, dabei messe ich jede Sekunde die Anzahl der übertragenen Bytes.
Nun würde ich das ganz gerne in einer TaChart darstellen (so wie es windows macht :roll: )

Also immer Fleißig einfüttern, bis 100 Sekunden drin sind und dann immer den 1. entfernen und den letzten einfügen, so dass man das dann "wandern" sieht.
Gibt es da schon Beispiele wie man das mit Tachart machen kann, oder muss ich da wirklich alles von hand bauen ?
Zuletzt geändert von corpsman am Do 10. Feb 2022, 13:55, insgesamt 1-mal geändert.
--
Just try it

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

Re: Rolliernendes Diagramm mit TAChart

Beitrag von wp_xyz »

Es kommt drauf an, ob du die Daten, die aus dem Fenster laufen, behalten willst oder nicht.

Wenn du sie behalten willst, kannst du seit Laz v2.2 das TChartLiveView auf Formular klicken und mit dem Chart verbinden. Das zeigt ein bestimmtes Fenster mit den letzten eingetroffenen Daten an, die alten Daten verschwinden nach links aus dem Fenster. Man kann aber zurückscrollen und sie sich zurückholen. Es gibt dazu ein Beispiel im Ordner demo/liveview der TAChart Installation, sowie ein komplexeres im Ordner demo/liveview_paned

Wenn du die alten Daten nicht mehr brauchst, dann lösche sie einfach aus der Chartsource. Angenommen du fügst die Daten in einem OnTimer-Event per Series.AddXY in die interne ListChartSource hinzu, dann ginge das so:

Code: Alles auswählen

procedure TForm1.TimerTimer(Sender: TObject);
begin
  While Chart1Lineseries1.Count > 100 do  // max 100 Datenpunkte
    Chart1Lineseries1.Delete(0);
end; 

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Rolliernendes Diagramm mit TAChart

Beitrag von corpsman »

Lol, so einfach kanns gehen
Das passt im Prinzip und macht genau was ich will

Code: Alles auswählen

  form2.Chart1LineSeries1.Add(TransferedBytes);
  // max 100 Datenpunkte
  if form2.Chart1Lineseries1.Count > 100 then begin
    form2.Chart1Lineseries1.Delete(0);
  end;
End; 
Gibt es nun noch einen Trick, wie der mir die Achse richtig beschriftet ?
Also ganz Rechts muss 0 stehen und ganz Links dann irgendwann -100
Aktuell zählt der ja einfach nur hoch ...
--
Just try it

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

Re: Rolliernendes Diagramm mit TAChart

Beitrag von wp_xyz »

Hey Mann, du bist doch ein erfahrener Programmierer: Warum schreibst du "form2" in den Code von TForm2? (zumindest vermute ich das) Dann funktioniert dein Programm nur, wenn die Instanz von TForm2 genauso heißt. Vor kurzem gab es entweder hier oder im englischen Forum ein schönes Beispiel, was mit diesem Unsinn passieren kann.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Rolliernendes Diagramm mit TAChart

Beitrag von corpsman »

*g*,
Da hast du recht solchen Unsinn macht man nicht, das passiert wenn man was geschwind zusammenpfuscht.

Übrigens die Lösung meines Problems sieht so aus:

Code: Alles auswählen

procedure TForm2.Chart1AxisList1MarkToText(var AText: String; AMark: Double);
var x : integer;
begin
x :=  Chart1LineSeries1.count - trunc(aMark -   Chart1LineSeries1.XValue[0]);
  atext := inttostr(-x);

end;
--
Just try it

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

Re: Rolliernendes Diagramm mit TAChart [gelöst]

Beitrag von wp_xyz »

Genau, an dieser Stelle habe ich gerade auch probiert.

Antworten