procedure TfrmMain.TmrMonitorTimer(Sender: TObject);
var t:Longint;
tmpX:Double;
begin
label1.caption:=intTostr(T2);
Randomize; // 데모용
With Chart1 do
begin
for t:=0 to SeriesCount-1 do
With Series[t] do begin
AddXY(T2,Random(100),'',clTeeColor);
end;
end;
if T2>2147483647 then
T2:=0
else if T2=7 then chart1.Nextpage;
inc(T2);
티차트를 사용하고 있는데요 x축이 예를 들어 7초로 정해 놨을 때 7초가 지나면
다음 페이지(?)로 넘어가 8 9 10~~ 이렇게 그림과 같이 나타내고 싶습니다...
또 14초가 지났을 땐 15 16 17~~ 이렇게 하고 싶습니다..
물론 값은 그 시간에 맞게 값이 나와야겠죠...
위와 같이 했는데.. Timer를 이용해서 했는데 좀 이상합니다.. 맞지 않는 듯... Nextpage가 맞는 코든가요?
그냥 그대로의 티차트를 사용하면 값이 쌓입니다.. 점점 합쳐지는 거죠...
그러면 안되거든요... 초보 좀 도와주세요..ㅠ 부탁드리겠습니다
제가 고전적으로 쓰고 있는것은
BottomAxis의 Min Max를 바꾸는 것인데요 이 방법도 나쁘지는 않아요
var
nowtime : TDateTime;
begin
nowtime := now;
Chart1.AddXY(nowtime , Random(100), '', dTeeColor);
With Chart1.BottomAxis do
begin
if Minimum > Maximum then
Minimum := Maximum - 200/(60*60*60);
Maximum := nowtime + 1/(60*60*60);
Minimum := nowtime - 200/(60*60*60);
end;
While Chart1.Series[0].Xvalues[0] < nowtime - 1000/(60*60*60) do
Chart1.Series[0].Delete(0);
end;
대충 감 잡겠지만 기준시간에서 200초를 보여주고
기준시간 1000초 전것은 삭제합니다.
실시간 모니터링은 데이터를 계속 보관하면 Overflow납니다.
그리고 원래 실시간 쪽은 타이머와 입력루틴은 별개로 있는거에요 즉, 다음과 같죠
// Timer
var
nowtime : TDateTime;
begin
nowtime := now;
With Chart1.BottomAxis do
begin
if Minimum > Maximum then
Minimum := Maximum - 200/(60*60*60);
Maximum := nowtime + 1/(60*60*60);
Minimum := nowtime - 200/(60*60*60);
end;
end;
// 입력 (TCP 또는 기타 입력장치에서 들어온 값)
var
nowtime : TDateTime;
begin
Chart1.AddXY(nowtime , Random(100), '', dTeeColor);
While Chart1.Series[0].Xvalues[0] < nowtime - 1000/(60*60*60) do
Chart1.Series[0].Delete(0);
end;