Hallo
ich suche jetzt schon seit 2 Tagen (google, und einschlägige Foren) um heraus zu finden wie ich TAChart dazu bewegen kann horizontal zu scrollen
Ich habe mir auch die ganzen Demos schon angesehen aber vielleicht bin ich ja blind.
Also ich habe 4 verschiedene Serien in einem Chart (Spannungen) welche auf einer Zeitachse dargestellt werden.
nun kommen immer neue Daten hinzu ähnlich wie bei einem Oszilloskope soll nun eine anzahl (z.B. 1000 Messpunkte) dargesellt werden und die älteren einfach aus der anzeige links rausscrollen
Das ist doch bestimmt mit TAChart möglich?
Wie setze ich die Anzahl an Messpunkten die im Diagramm dargestellt werden (z.B. 1000 Werte) und wie veranlasse ich dann das Chart dazu die älteren Daten links rauszuscrollen ?
Wäre Toll wenn mir hier jemand weiterhelfen könnte.
LG vom Bodensee
Jürgen
TAChart hoizontales Scrollen
-
- Lazarusforum e. V.
- Beiträge: 561
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
Re: TAChart hoizontales Scrollen
Hallo JKnill,
ich weis nicht, ob das Problem direkt mit Methoden von TAChart zu lösen ist.
Ich würde so vorgehen:
- lade deine Messwerte in dynamische Felder
- kopiere nach jeder neuen Messung die letzten n-Wertepaare in Chart1LineSeries1.AddXY(xi,yi) , die dann in Chart1 dargestellt werden.
Viel Erfolg.
Gruß, Linkat
ich weis nicht, ob das Problem direkt mit Methoden von TAChart zu lösen ist.
Ich würde so vorgehen:
- lade deine Messwerte in dynamische Felder
- kopiere nach jeder neuen Messung die letzten n-Wertepaare in Chart1LineSeries1.AddXY(xi,yi) , die dann in Chart1 dargestellt werden.
Viel Erfolg.
Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
Re: TAChart hoizontales Scrollen
Hallo Linkat
Danke für die schnelle Antwort
ich habe das ohne zeitachse mit
Chart1.Extent.XMin :=Chart1.Extent.XMin + 1000 ;
Chart1.Extent.XMax:=Chart1.Extent.XMin + 10000;
das funktioniert aber leider nicht mehr sobald DateTimeIntervalChartSource verwendet wird
werde deinen vorschlag mal versuchen ( evt mit MEMDB )
LG vom Bodensee
Jürgen
Danke für die schnelle Antwort
ich habe das ohne zeitachse mit
Chart1.Extent.XMin :=Chart1.Extent.XMin + 1000 ;
Chart1.Extent.XMax:=Chart1.Extent.XMin + 10000;
das funktioniert aber leider nicht mehr sobald DateTimeIntervalChartSource verwendet wird
werde deinen vorschlag mal versuchen ( evt mit MEMDB )
LG vom Bodensee
Jürgen
-
- Lazarusforum e. V.
- Beiträge: 561
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
Re: TAChart hoizontales Scrollen
Hallo Jürgen,
habe ein kleines Testprogramm geschrieben. was eine Sinuskurve durch das Chart treibt.
Gruß, Linkat
habe ein kleines Testprogramm geschrieben. was eine Sinuskurve durch das Chart treibt.
Code: Alles auswählen
unit OssziTestU;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, TAGraph, TASeries, Forms, Controls, Graphics,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1: TBitBtn;
btStart: TButton;
Chart1: TChart;
Chart1LineSeries1: TLineSeries;
Timer1: TTimer;
procedure btStartClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 } {Test von Linkat 23.08.12}
var mwz :Integer; {Messwertzähler}
t0,t :Double;
daX,daY :array of Double; {dynam. Arrays}
procedure TForm1.FormCreate(Sender: TObject);
begin
BitBtn1.Caption:='&Schließen';
btStart.Caption:='S&tart Osszi';
timer1.Enabled:=False;
timer1.Interval:=100;
end;
procedure TForm1.btStartClick(Sender: TObject);
begin
mwz:=0;
timer1.Enabled:=True;
t0:=now;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
SetLength(daX,0);
SetLength(daY,0);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i :Integer;
x,y :Double;
begin
inc(mwz);
Caption:=IntToStr(mwz);
SetLength(daX,mwz);
SetLength(daY,mwz);
t:=now;
t:=t-t0; {Zeitdifferenz von jetzt zu Beginn der Messung (in Tagen)}
x:=t*60*60*24; {Zeit in Sekunden}
y:=sin(x);
daX[mwz-1]:=x;
daY[mwz-1]:=y;
Chart1LineSeries1.Clear;
for i:=mwz-50 to mwz-1 do if i>=0 then begin
Chart1LineSeries1.AddXY(daX[i],daY[i]);
//chart1.Extent.XMin:=daX[mwz-50]; <- wird nicht benötigt
end;
end;
end.
Gruß, Linkat
Zuletzt geändert von Linkat am Fr 24. Aug 2012, 13:37, insgesamt 1-mal geändert.
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
Re: TAChart hoizontales Scrollen
Hi Linkat
danke für den Source jetzt habe ich es kapiert
werde ich dann nächste Woche versuchen
nochmal Danke und ein schönen Wocheende
LG vom Bodensee
Jürgen
danke für den Source jetzt habe ich es kapiert
werde ich dann nächste Woche versuchen
nochmal Danke und ein schönen Wocheende
LG vom Bodensee
Jürgen