2008-10-14 2 views
2

나는 유지 관리중인 TChart를 사용하는 보고서를 가지고 있습니다. 추가 된 TLineSeries 중 하나에 자동으로 색상 clWhite가 할당되며 배경에 너무 가까이 있습니다 (clBtnFace).시리즈에서 델파이와 함께 clWhite를 사용하지 못하도록하십시오. TChart

내가 변경하면 다음 시리즈에 clWhite가 추가됩니다. 다시 돌아가서 다른 모든 시리즈를 만든 후에 그것을 바꿀 수 없다면 TChart에게 내 시리즈가 clWhite가되기를 원하지 않는다고 말할 수있는 방법이 있습니까?

시리즈가 TChart에 추가되면 TChart가 색상을 지정합니다. clWhite를 지정하지 않기를 바랍니다.

답변

6

쉽게 포기할 사람은 없지만 좀 더 검색했습니다. TeeProcs 단위로 TColorArray의 ColorPalette이라는 단위 변수가 있습니다. 흰색을 찾아 그것을 대체하는 다른 색으로 바꾼다면. 인스턴스 복사본이있을 수 있습니다. 나는 그것이 선호 될 것이므로 계속 찾고있을 것이다.

다시 그냥 같은 단위로 단위 방법을 SetDefaultColorPalette를 호출 ColorPalette을 되돌리려.

SetDefaultColorPalette; // Make sure we start with the default 
ColorPalette[4] := $007FFF; // Change White to Orange 
try 
    // add series to the chart 
finally 
    SetDefaultColorPalette; // Set it back to Default 
end; 

BTW, 내가 너무 질문을하기 때문에 나는 대답로 받아 들일 수 있지만, 나는 그것을 테스트하고 그것을 작동합니다.

2

가까운 TeeCharts 모듈에서 알 수 있습니다. 아니요 배송 할 때 없어야하는 색상을 지정할 수 없습니다.
실행시에 clWhite를 사용하지 않도록 모든 TLineSeries 항목을 프로그래밍 방식으로 처리 할 수 ​​있습니다. 허용되는 색 배열 clArray가 있다고 가정하면 다음 코드를 사용하여 런타임에 각 tLineSeries 항목의 색을 설정할 수 있습니다.

procedure TForm1.setColors(aChart: TChart; aColorArray: array of TColor); 
var 
    chi : Integer; 
    coi : Integer; 
begin 
    coi := low(aColorArray); 
    for chi := 0 to aChart.SeriesList.Count - 1 do begin 
    aChart.SeriesList[chi].Color := aColorArray[coi]; 
    inc(coi); 
    if coi > high(aColorArray) then 
     coi := low(aColorArray); 
    end; 
end; 

procedure TForm1.FormShow(Sender: TObject); 
var 
    ca : array of TColor; 
begin 
    setLength(ca, 3); 
    ca[0] := clRed; 
    ca[1] := clBlue; 
    ca[2] := clGreen; 
    setColors(Chart1, ca); 
end; 
+0

그건 제가 두려워했던 것입니다. –

+0

해결책을 찾았습니다! ColorPalette 배열입니다. –

0

ClearPalette 및 AddPalette의 직렬 방식을 사용하여 사용자 정의 팔레트를 만들 수 있습니다.

+0

나는 그 방법을 찾을 수 없었다. –

+0

죄송합니다 - 이들은 3D 및 표면 시리즈 용입니다. – Argalatyr

관련 문제