Impedir série usando clWhite com Delphi TChart
Pergunta
Eu tenho um relatório que usa um TChart que estou mantendo. Um dos TLineSeries que é adicionado automaticamente é atribuída a cor clWhite, que é muito perto do fundo (clBtnFace).
Se eu mudá-lo, então a próxima série que é adicionado leva clWhite. Tão curto de ir para trás e mudá-lo depois de todas as outras séries são criados, há alguma maneira de dizer o TChart que eu não quero nenhuma das minhas séries para ser clWhite?
Quando uma série é adicionado ao TChart o TChart atribui uma cor. Eu quero que ele não clWhite Atribuir.
Solução
OK não um a desistir facilmente, eu fiz mais algumas pesquisas. Há uma variável unidade chamada ColorPalette do tipo TColorArray na TeeProcs unidade. Se eu encontrar e substituir branco com uma cor diferente isso resolve o problema. Pode haver uma cópia instância dele. Vou continuar procurando desde que seria preferível.
Para reverter o ColorPalette de volta apenas chamar o método da unidade SetDefaultColorPalette na mesma unidade.
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, eu não posso aceitar como resposta ??strong> porque eu fiz a pergunta também, mas eu testei e funciona.
Outras dicas
Perto quanto eu posso dizer a partir do módulo TeeCharts; não, você não pode especificar uma cor que não deve ser como navios.
Você pode programaticamente percorrer todas as entradas TLineSeries certificando-se em tempo de execução que eles não usam clWhite.
Digamos que você tem uma variedade de cores aceitáveis ??clArray, você pode usar o código a seguir para definir as cores de cada uma das entradas tLineSeries em tempo de execução.
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;
Você pode usar os métodos da série ClearPalette então AddPalette para criar sua paleta personalizada.