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

C++빌더 FAQ
C++Builder Programming FAQ
[84] TChart의 Y축 눈금 라벨 표시를 바꾸려면?
박지훈.임프 [cbuilder] 19659 읽음    2005-10-06 17:20
질문 장기복님

그래프를 그리기 위해 TChart compononet를 이용하고 있습니다.
다 잘되는데, 한가지 안되는게 있어서 질문드립니다.
뭐냐하면 그래프의 y축에 나오는 숫자의 포맷을 임의로 변경할 수가 없습니다.
숫자의 단위가 커서 지수형태로 하고 싶은데...


답변 박지훈.임프님

TChart의 OnGetAxisLabel 이벤트 핸들러를 작성해서 직접 그려질 Label들의 텍스트를 조작하면 됩니다. 이 이벤트는 차트의 Axis의 Label들의 값을 알아내려고 할 때마다 발생하는 이벤트로서, 여기서 직접 텍스트값을 임의로 바꿔줄 수 있습니다. 예를 들어서, 다음과 같이,
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    for(int i=0; i<10000; i++)
        Chart1->Series[0]->AddXY(i, i*2, "", clYellow);
}
이렇게 x값이 0에서부터 10000까지 주루룩 증가하는 차트모양을 만든다고 합시다. 그러면 y값은 위의 연산에 따라 최대 20000까지 증가하겠지요? 그런데 최대값이 10000이나 나오는 단위는 너무 번거로와서, 단위를 1000단위로 하고, 최대로 나타날 Label 텍스트를 20까지로 하고 싶다고 하면? (사실은 19까지 나타납니다.)
이때는 다음과 같이 코딩하면 됩니다.
void __fastcall TForm1::Chart1GetAxisLabel(TChartAxis *Sender,
      TChartSeries *Series, int ValueIndex, AnsiString &LabelText)
{
    if(Sender == Chart1->LeftAxis)
    {
        int Val = StrToIntDef(LabelText, 0);
        Val = Val / 1000;
        LabelText = IntToStr(Val);
    }
}
지수형으로 문자열을 만드는 알고리즘은.. 직접 작성하셔도 되겠지요?

그럼 참고하시길...


참고

알려주신대로 해봤는데, 한가지만 빼고는 잘되었습니다. 즉, 포맷은 원하는 대로 수정이 되었습니다. 그런데, 최초에 100,000,000처럼 큰 label에 맞게 그래프가 조절되어 있던게, 1.0e09와 같이 변한 label에 맞게 다시 돌아가지를 않더군요.

대신에 TChart에서 포맷을 지원하는 것을 찾았습니다. Axis-Label의 values format에서 예전에는 지수형을 지원안하는 것으로 알았는데, 다시 헬프를 뒤적거리니 지원한다고 하더군요. AnsiString:FormatFloat 에서 지원하는 것을 다 지원한다고 합니다.
그런니까 지수로 하려면, 0.00E+00이아 , #.##E+00처럼 하면 됩니다. 그래프 크기도 적당히 만들어 지구요.

http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=3149

+ -

관련 글 리스트
84 TChart의 Y축 눈금 라벨 표시를 바꾸려면? 박지훈.임프 19659 2005/10/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.