실시간 디스플레이를 하고자 합니다...
List index out of bounds (800) 이라는 에러때문에 미치겠습니다...
거의 몇개월째 고생하고 있습니다...
OnAfterAdd라는 함수는 차트에 Add를 하면 발생하는 이벤트이고...
아래와 같이 프로시저를 구현했습니다...
일단 Seires1의 Min값을 0으로 하고...Max값을 1000으로 하였고...
그래프를 그리다가 800개를 그리고나서부터는...
하나씩 지우기 시작합니다...
delete를 시작하게 되면...그에 맞추어서 Min값과 Max값이 증가하게 됩니다...
1초에 100개정도를 차트에 뿌려줍니다...
어떻게 하면 좋을까요?
오늘도 새벽까지 이 일을 하고 있습니다...
이 에러 때문에요...
좀 도와주세요~~~
procedure TForm1.Series1AfterAdd(Sender: TChartSeries;
ValueIndex: Integer);
// Chart에 Add할 때마다 발생하는 event
var
i: Integer;
begin
evt_cnt:=evt_cnt+1;
if totalfg=False then
// total view일 때는 실시간처럼 보이게 할 필요 없음
begin
with Sender.GetHorizAxis do { <-- with the Horizontal Axis... }
begin
Automatic := False;
Minimum:=0; // 다시 begin을 눌러도 될 수 있도록 초기화
if ValueIndex < 800 then
begin
Maximum:=999;
Minimum:=0;
end
else
begin
Minimum:=Sender.XValues[0]+1;
Maximum:=Minimum+999;
Sender.Delete(0);
end;
Label5.Caption:=FloatToStr(Maximum);
Label6.Caption:=FloatToStr(Minimum);
Label7.Caption:=FloatToStr(ValueIndex);
Label8.Caption:=FloatToStr(Sender.XValue[0]);
end;
end;
end;
부탁드려요~~~
이건 말 그대로 out of bounds인데요. 님께서 어떤 리스트에다가 800개의 자료를 넣었다면 그것들의 인덱스는 0부터 799까지가 되겠죠. 그런데 아무런 자료가 없는 800번째의 자료를 접근할려면 이런 에러가 발생합니다. 800번째에 자료가 있는가를 살펴서 인덱스를 잘 맞추세요...
^^ 항상 즐코하세요...
최종민 wrote:
> 실시간 디스플레이를 하고자 합니다...
> List index out of bounds (800) 이라는 에러때문에 미치겠습니다...
> 거의 몇개월째 고생하고 있습니다...
> OnAfterAdd라는 함수는 차트에 Add를 하면 발생하는 이벤트이고...
> 아래와 같이 프로시저를 구현했습니다...
> 일단 Seires1의 Min값을 0으로 하고...Max값을 1000으로 하였고...
> 그래프를 그리다가 800개를 그리고나서부터는...
> 하나씩 지우기 시작합니다...
> delete를 시작하게 되면...그에 맞추어서 Min값과 Max값이 증가하게 됩니다...
> 1초에 100개정도를 차트에 뿌려줍니다...
> 어떻게 하면 좋을까요?
> 오늘도 새벽까지 이 일을 하고 있습니다...
> 이 에러 때문에요...
> 좀 도와주세요~~~
>
> procedure TForm1.Series1AfterAdd(Sender: TChartSeries;
> ValueIndex: Integer);
> // Chart에 Add할 때마다 발생하는 event
> var
> i: Integer;
> begin
> evt_cnt:=evt_cnt+1;
> if totalfg=False then
> // total view일 때는 실시간처럼 보이게 할 필요 없음
> begin
> with Sender.GetHorizAxis do { <-- with the Horizontal Axis... }
> begin
> Automatic := False;
> Minimum:=0; // 다시 begin을 눌러도 될 수 있도록 초기화
> if ValueIndex < 800 then
> begin
> Maximum:=999;
> Minimum:=0;
> end
> else
> begin
> Minimum:=Sender.XValues[0]+1;
> Maximum:=Minimum+999;
> Sender.Delete(0);
> end;
> Label5.Caption:=FloatToStr(Maximum);
> Label6.Caption:=FloatToStr(Minimum);
> Label7.Caption:=FloatToStr(ValueIndex);
> Label8.Caption:=FloatToStr(Sender.XValue[0]);
> end;
> end;
> end;
>
> 부탁드려요~~~