Pregunta

Tengo un informe que utiliza un TChart que estoy manteniendo. A uno de los TLineSeries que se agregan automáticamente se le asigna el color clWhite, que está demasiado cerca del fondo (clBtnFace).

Si lo cambio, la siguiente serie que se agregue toma clWhite. Tan poco como para volver atrás y cambiarlo después de que se hayan creado todas las demás series, ¿hay alguna manera de decirle al TChart que no quiero que ninguna de mis series sea clWhite?

Cuando se agrega una serie al TChart, el TChart le asigna un color. Quiero que no asigne clWhite.

¿Fue útil?

Solución

Está bien, no me rindo fácilmente, hice más búsquedas. Hay una variable de unidad llamada ColorPalette de tipo TColorArray en la unidad TeeProcs . Si encuentro y sustituyo el blanco con un color diferente que lo arregla. Puede haber una copia de instancia de él. Seguiré buscando ya que sería preferible.

Para revertir la ColorPalette atrás, simplemente llame al método de la unidad SetDefaultColorPalette en la misma unidad.

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;

Por cierto, no puedo aceptar como respuesta porque también hice la pregunta, pero la probé y funciona.

Otros consejos

Lo que puedo decir del módulo TeeCharts; no, no puede especificar un color que no debería ser como se envía.
Puede recorrer de forma programada todas las entradas de TLineSeries asegurándose en el tiempo de ejecución de que no usen clWhite. Supongamos que tiene una matriz de colores aceptables. Puede usar el siguiente código para configurar los colores de cada una de las entradas de tLineSeries en el tiempo de ejecución.

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;

Puedes usar los métodos de serie ClearPalette y luego AddPalette para crear tu paleta personalizada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top