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 )
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 ?
Rolliernendes Diagramm mit TAChart [gelöst]
- 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]
Zuletzt geändert von corpsman am Do 10. Feb 2022, 13:55, insgesamt 1-mal geändert.
--
Just try it
Just try it
Re: Rolliernendes Diagramm mit TAChart
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:
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;
- 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
Lol, so einfach kanns gehen
Das passt im Prinzip und macht genau was ich will
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 ...
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;
Also ganz Rechts muss 0 stehen und ganz Links dann irgendwann -100
Aktuell zählt der ja einfach nur hoch ...
--
Just try it
Just try it
Re: Rolliernendes Diagramm mit TAChart
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.
- 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
*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:
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
Just try it
Re: Rolliernendes Diagramm mit TAChart [gelöst]
Genau, an dieser Stelle habe ich gerade auch probiert.