C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[66197] Re: 오실로스코프 Time/div 구현 복잡하게 생각할 것 없습니다
빌더 [] 2053 읽음    2012-02-07 00:29
TestChart_2.exe 3.5MB 컴파일한 실행파일
쌩조 님이 쓰신 글 :
: 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분도 안 걸릴거에요. 컴파일한 실행파일 같이 첨부합니다.

+ -

관련 글 리스트
66195 다시 한번 도움좀 부탁드립니다. ㅜ 쌩조 935 2012/02/06
66197     Re: 오실로스코프 Time/div 구현 복잡하게 생각할 것 없습니다 빌더 2053 2012/02/07
66199         Re:Re: 오실로스코프 Time/div 구현 복잡하게 생각할 것 없습니다 쌩조 1417 2012/02/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.