2013-04-16 15 views
0

내 TeeChart가 아주 좋아 보인다. 그리드 선/틱이 원하는 위치에 나타납니다 (X 축 LabelStyle이 talAuto로 설정 됨). 이제 데이터 포인트 번호가 아닌 시간 오프셋을 표시하도록 X 축 라벨을 포맷해야합니다.TeeChart X 축 레이블 서식

저는 LabelStyle을 talMark로 변경했으며 차트의 OnGetAxisLabel을 처리하고 있습니다. 문제는 내 이벤트 핸들러가 LabelStyle을 talAuto로 설정했을 때 레이블을 표시하는 점이 아닌 모든 X 축 포인트에 대해 호출된다는 것입니다.

LabelStyle이 talAuto 일 때 그려지는 레이블에 대해서만 내 이벤트 처리기가 호출되도록 어떻게 설정할 수 있습니까?

저는 C++ Builder XE3과 IDE에 포함 된 TeeChart 버전을 사용하고 있습니다. Yeray의 의견에 의해 영감을

UPDATE : 라벨 스타일로

내가 항상 -1을 내 이벤트 핸들러에 전달 ValueIndex를 얻을 talAuto로 설정합니다. LabelText를 보면 ValueIndex에서 예상했던 값을 볼 수 있지만 값이 같지 않은 숫자 (X 축 이외의 값은 무시함)가 표시됩니다. 예를 들어 ...

내 차트 표시 5 X 축 값 : 200, 400, 600, 800, (1000) 내 이벤트 핸들러가 10 회 호출되며,이 순서 : I가 없음을

ValueIndex  LabelText 
    -1    937.5 
    -1    0 
    -1   240,000 
    -1    200 
    -1   239,800 
    -1   1,000 
    -1    800 
    -1    600 
    -1    400 
    -1    200 

첫 번째 5 개 값의 출처 또는 이벤트 처리기가 호출 된 이유.

참고 : 언어에 관계없이 TeeChart를 사용하는 모든 사람이이 질문에 답변 할 수 있으므로 C++ 빌더 태그를 제거했습니다. BCB를 사용하고 있다는 사실은 그 질문에 중요하지 않습니다.

+0

vcl 태그를 추가했습니다. 다르게 행동 할 수있는 TeeChart 버전이 있기 때문에 BCB를 사용한다는 사실은 부분적으로 적합합니다. – Yeray

+0

나에게 의미가있다. – casterle

답변

2

나는 LabelStyle을 talMark로 변경했으며 차트의 OnGetAxisLabel을 처리하고 있습니다. 문제는 내 이벤트 핸들러가 의 모든 X 축 지점을 호출한다는 것입니다. LabelStyle을 talAuto로 설정했을 때 레이블을 표시 한 점이 아니라 문제입니다.

오른쪽 : talMarkLabelStyle을 사용하면 축이 시리즈의 점만큼 레이블을 그립니다. talAutoLabelStyle을 사용하여 원하는 레이블 수를 얻을 수 있으며 OnGetAxisLabel 이벤트에서 레이블의 서식을 지정할 수 있습니다.


업데이트 : talAuto를 사용하는 경우

, ValueIndex 항상 -1 그래서 데이터 포인트가 이벤트와 연결되어 아무 생각이 없습니다. talAuto가 설정되고 시리즈는 라벨이있는 경우는

, 그것은 talTexttalMark처럼 동작 : 이러한 문자열은 바닥 축에서 사용하고 ValueIndexOnGetAxisLabel에서 이벤트를 사용할 수 있습니다. talAuto이 설정되었지만 계열에 레이블이 없으면 talValue처럼 작동합니다. 하단 축은 Minimum, MaximumIncrement의 기능으로 표시 할 레이블을 계산합니다.축 레이블이 시리즈 점과 일치하지 않으므로 (OnGetAxisLabel) 이벤트를 사용할 수 없습니다.

시리즈에 라벨이없는 것 같습니다. 그렇지 않으면 talAuto에서 talMark으로 변경해서는 안됩니다.

그래서 둘 중 하나를 결정해야합니다. 어쩌면 talValue (또는 레이블이없는 talAuto)을 사용하여 원하는 레이블 수를 얻고 그려지는 문자열에서 필요한 정보를 추출 할 수 있습니다.


또는 CustomLabels을 사용하는 것이 더 쉬울 수도 있습니다. 이벤트를 사용하지 않고도 축 레이블의 위치와 텍스트를 모두 제어 할 수 있습니다. 예 :

procedure TForm1.FormCreate(Sender: TObject); 
var i: Integer; 
begin 
    Chart1.View3D:=false; 

    Chart1.AddSeries(TBarSeries).FillSampleValues; 

    Chart1.Axes.Bottom.Items.Clear; 
    for i:=0 to Chart1[0].Count-1 do 
    Chart1.Axes.Bottom.Items.Add(Chart1[0].XValue[i], 'label ' + IntToStr(i)); 
end; 
+0

감사합니다. @ 예. talAuto를 사용할 때 ValueIndex는 항상 -1이므로 어떤 데이터 요소가 이벤트와 관련되어 있는지 알지 못합니다. – casterle

+0

문자열에서 정보를 얻고 싶습니다. 그러나 위의 업데이트 (내 게시물의 표 참조)에서 지정한 것처럼 5 개의 레이블을 표시하는 차트의 경우 이벤트 처리기가 10 번 호출됩니다. 처음 5 개의 호출은 잘못된 값을 가진 문자열을 전달합니다. 합법적 인 값 문자열을 포함하는 호출을 알 수있는 방법이 없습니다. – casterle

+0

CustomLabels은 어떤가요? – Yeray