2013-04-05 2 views
1

나는 막대 계열 막대 그래프를 겹쳐서 만들려고합니다. 모든 막대는 두 부분으로 구성됩니다. 메인 파트는 정상적인 색상과 검은 색 테두리가 있으며, "한계 초과"부분은 빨간색 테두리와 밝은 색상이 있습니다. IDE (Delphi XE3)에서이 동작을 구성하는 데 문제가 없습니다. 너무 작은 "제한 초과"막대가있을 때 구성된 동작이 좋지 않습니다. 이 막대가 1px로 높으면 빨간색 테두리가 사라지고 1px 브러시 색상 선만 렌더링됩니다. 경계선을 렌더링해야합니다. 그래서이 막대의 색을 바꾸려고합니다.특정 값에 대한 수직 막대의 높이 얻기

Series1.AddY((RamTotal-RamAvailable-memover)/mb, titlemem); 
if memover > 0 then 
    Series2.AddY(memover/mb, titlememover); 
if (memover > 0) and (Series2.CalcBarBounds(0).Height <= 2) then 
    Series2.ValueColor[0] := FSmallOverColor; 

문제가 CalcBarBounds 기능입니다 : 여기

내 코드의 일부입니다. 차트가 이미 표시된 후에 만 ​​올바른 값을 반환합니다. 처음으로 0을 반환합니다.이 결과는 처음 표시 할 때의 높이에 관계없이 모든 "제한 초과"막대에 테두리 색을 적용합니다. 모든 시리즈를 지우고 이전과 같은 코드를 호출하는 리로드 버튼을 누르면 모든 것이 잘 보입니다. 코드에서 다시로드를 호출하면 작동하지 않습니다. 새로 고침, 다시 그리기 등을 호출하면 도움이되지 않습니다. AfterDraw 이벤트에서 색상을 변경하려고해도 작동하지 않습니다.

모든 시리즈에 대해 하나의 값만 있습니다. 나는 TeeChart Standard v2012.06.120613 32bit를 가지고 있습니다.

답변

1

문제는 CalcBarBounds 함수와 관련이 있습니다. 차트가 이미 표시된 후 올바른 값 ( ) 만 반환합니다. 처음으로 0을 반환합니다.이 은 처음 표시 할 때 높이가 에 관계없이 모든 "제한 초과"막대에 테두리 색을 적용합니다. 다시로드 버튼을 눌러 모든 시리즈를 지우고 이전과 동일한 코드를 호출하면 모든 것이 잘 보입니다. 코드에서 다시로드를 호출하면 작동하지 않습니다.

CalcBarBounds을 호출하기 전에 차트 다시 칠하기를 강요해야 할 것입니다. 일부 내부 값이 초기화되지 않았거나 차트가 첫 번째 페인트를 완료 할 때까지 유효한 값이 없습니다.

새로 고침, 다시 칠 또는 무엇이든은

당신이 Draw 함수를 호출 봤어 도움이되지 않습니다 호출?

+0

이것은 답변이 아닙니다. 그것은 정보 요청이며 대신 의견으로 게시해야합니다. "귀하의 답변"텍스트 영역에 게시 된 모든 내용만으로 해결됩니다 - 질문에 대한 답변을 제공하십시오. 설명을 펼치거나 답변을 읽거나 대신 원래 질문에 주석으로 옮길 수 있도록 문장을 확장해야합니다. [faq]에는이 둘의 차이점에 대한 정보가 있습니다. :-) –

+0

주된 문제를 해결하는 열쇠가 될 수 있기 때문에 답으로 썼습니다. 내가 주장하는 것이 더 나을 수도 있다는 것에 동의하지만 나는 품질에 대한 시간을 우선시했다. 나는 그것이 문제를 해결하기에 충분했는지 여부를 말해야하는 창조자가 될 것이라고 생각합니다. 어쨌든, 나는 그것을 향상 시키려고 노력할 것이다. – Yeray