쌩조 님이 쓰신 글 :
: Teechart를 이용해서 오실로스코가 가지고 있는 Time/div 효과를 만들어 낼려고 하는데
: 도대체 어떻게 접근해야 할지를 모르겠습니다.
: 몇일째 모니터만 뚫어 지게 보고 있습니다 ㅜㅜ
오실로스코프의 Time/div 기능을 복잡하게 생각할 것 없습니다.
TrackBar 콘트롤을 센터값을 100으로, 최대값을 200으로 하면, 센터에 있을 때 스케일 Factor를
1.0으로 보면 되니까 스케일 처리가 간단해 지겠죠.
TChart 콘트롤의 BottomAxis 프로퍼티의 Max 값에 TrackBar의 스케일 Factor 값을 곱해주면
그것으로 오실로스코프의 Time/div 기능이 구현 됩니다.
TChart 콘트롤 자체가 리얼타임 동작에 적합하도록 구현되어 있는 것도 아니고, 일일이 Series
데이타 요소 하나하나 마다 스케일 Factor를 계산해서 처리하는 방법은 상당히 비효율적 이니까
위에 언급한 방식으로 해보세요. 코드는 다음과 같은 식으로 처리하면 되겠죠.
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
static int prevPos = 100;
static bool first_time = true;
static double Min, Max;
int newPos = this->TrackBar1->Position;
if( first_time ) {
Min = Chart1->BottomAxis->Minimum;
Max = Chart1->BottomAxis->Maximum;
first_time = false;
}
if( prevPos != newPos )
{
prevPos = newPos;
Chart1->BottomAxis->SetMinMax(Min, Max * newPos /100.0);
}
}
코드를 구현하는데 10분도 안 걸릴거에요. 컴파일한 실행파일 같이 첨부합니다.
|