|
다시 질문 올려주셨군요..
첨부하신 오류메세지는 메모리 오류인거구요,
Desired Increment 란 항목은 지정하고 싶은 증가치 를 설정하는 겁니다.
0인 경우는 자동으로 설정하고자 하는 것이구요...
chtCurrent가 Chart이름인듯 한데,
// 요렇게 사용하실 수 있고 sValueX는 옵션입니다. 안줘도 무방하다는 말이지요
chtCurrent->Series[0]->AddXY(iValueX, iValueY, "", clBlue);
if(iValueX>10)
{ // X축 인덱스가 10 넘으면
chtCurrent->Series[0]->Delete(0); // 제일 처음의 데이타리스트를 지운다.
chtCurrent->BottomAxis->SetMinMax(chtCurrent->Series[0]->MinXValue(),
chtCurrent->Series[0]->MaxXValue()); //이렇게 하시면 자동으로 최소, 최대값으로
}
또 하나의 의문을 적으셨는데, 쓰레드에서 이 함수를 호출하신다고 하셨는데...
쓰레드에서 이처럼 화면 업데이트와 관련된 일을 할때는 상당히 주의를 요하구요..
여기서는 데이타 추가하면 자동적으로 화면업데이트가 일어나는 것으로 저도 정확히
Synchronize(GraphScan); 으로 써야 하는지 모르겠습니다만,
VCL을 쓰레드에서 사용하는 것으로 생각해야 할 것 같아.. Synchronize()함수를 쓰시길
권합니다.
제 생각에는 Chart가 아닌 다른 이유로 오류가 나는 듯 합니다.
데이타로 쓰이는 포인터나 메모리 쪽을 주의 깊게 살펴보시기 바랍니다.
흔히 리스트를 사용할 때 메모리 오류를 범하기 쉽다는 것을 주의하시고,
소스를 차근 차근 살펴보시면서 점검해 보시길 권합니다.
도움이 별로 안되서 ^^* 그만 물러갑니다.
쩡이 님이 쓰신 글 :
: 외랑님! 답변 감사드립니다.
: Logarithmic이 로그함수였군요. 켁 ㅡ.ㅡ;
: 예전 프로그램이 문제를 일으켰을 때 떴던 오류메세지를 캡쳐해서 첨부파일로 올립니다.
: 이 두가지 메세지가 번갈아가면서 나타납니다.
:
: 지금 새롭게 알아낸 것인데 Desired Increment에 0을 넣었을 때, 이런 문제가 발생합니다.
: 1을 넣으면 정상작동하고요.
: 소스부분입니다.
:
: void __fastcall TfrmTemp::GraphScan(unsigned int Value)
: {
: iValueX++; // unsigned int 선언
: iValueY= Value; // unsigned int 선언
:
: AnsiString sValueX= FormatDateTime("HH:NN", Now());
: chtCurrent->SeriesList->Series[0]->AddXY(iValueX, iValueY, sValueX, clBlue);
:
: if(iValueX>10) { // X축 인덱스가 10 넘으면
: chtCurrent->SeriesList->Series[0]->Delete(0);
: chtCurrent->BottomAxis->SetMinMax(iValueX-9, iValueX);
: }
: }
:
: 스레드에서 GraphScan()을 호출해서 차트를 그리고요.
: 차트가 안보여질 때는 어떠한 값이 차트로 들어가도 잘 작동합니다.
: 차트를 보고 싶을 때, 버튼을 클릭해서 ShowModal()로 폼을 띄울려는 그 순간,
: ShowModal() 부분에서 Break가 걸리면서 에러메세지를 띄웁니다.
: 프로그램을 처음으로 실행시키고, 처음으로 ShowModal로 볼 때, 일어나는 문제인데요.
: 그 때 당시에 Y축으로 들어간 값이 대략 1200 이상의 값이 들어가 있으면 이런 현상이 나타납니다.
:
: Desired Increment을 조정해서 프로그램이 정상적으로 동작은 하는데 불안하네요.
: 질문을 정리하면 X축, Y축의 입력값에 제한이 있는가,
: 2의 32승까지는 값을 받아야하거든요.
: 그리고 Desired Increment가 Y축 라벨의 값 표시 폭으로 이해하고 있는데,
: 이런 것으로 인해 말씀드린 문제가 나타나는 것인지요?
: 혹 문제점이 있어서 말씀해주시면 감사하겠습니다.
: 좋은 하루 되세요.
:
:
:
: 외랑 님이 쓰신 글 :
: : 쩡이님의 질문에 대한 답변
: : : 처음에는 Y축 값으로 약1200이상 들어가면 프로그램이 오류메세지를 띄우면서 멈춰버렸습니다.
: : - Y의 값이 1200보다 커지면 오류인가요? 질문을 잘 모르겠어요.. 조금 더 자세히 질문해 주시면 답변해드릴수 있을지도 모르겠습니다.
: : : Y축 라벨이 50씩 값이 올라가는데요. 위쪽으로 갈수록 모여져서(?) 그려집니다.
: : - Log를 사용하시면 당연히(?) 모여져서 그려집니다. Y값의 log값으로 생각해 보시면... 이해하실 수 있으실겁니다.
: : 이는 Log함수의 특징이라 그렇습니다. 전 영역중 큰쪽이든 작은쪽이든 한쪽을 자세히(? 관심영역을) 보이고 싶을때 쓸수있습니다.
: : Chart부분 소스를 보여주시면 좀 더 상세한 답변을 드릴수 있을지 모르겠네요..^^*
: : 그럼 하시는 일 성공하시길 바랍니다.
: :
: :
: : 쩡이 님이 쓰신 글 :
: : : C++Builder 6 사용자입니다.
: : : 빌더에 기본적으로 들어있는 TChart를 이용해서 그래프를 나타낼려고 합니다.
: : : 처음에는 Y축 값으로 약1200이상 들어가면 프로그램이 오류메세지를 띄우면서 멈춰버렸습니다.
: : : (저와 비슷한 문제를 겪은 질문이 몇 개 있더군요.)
: : : 그래서 차트를 더블클릭하면 나타나는 Editing 창의 Axis/Scales 안의 Left Axis에 Logarithmic (대수?)
: : : 이 옵션을 사용하니 커다란 값도 입력은 잘 받습니다.
: : :
: : : 질문드리고자하는 내용은..첨부파일을 보시면
: : : Y축 라벨이 50씩 값이 올라가는데요. 위쪽으로 갈수록 모여져서(?) 그려집니다.
: : : 균일하게 그리게하고 싶은데요.
: : : 다른 컴포넌트와 충돌이 나는가 싶어 다른 컴퓨터에 빌더 하나만 달랑 설치해도 마찬가지입니다.
: : : 어찌할지 모르겠습니다. 혹시 원래 그런건지도 모르겠구요.
: : : 아시는 분은 알려주시면 감사하겠습니다.
: : : 오늘 하루도 즐거이~
|