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.

Foi útil?

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 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top