Domanda

Ho un rapporto che utilizza un TChart che sto mantenendo. A uno dei TLineSeries che vengono aggiunti automaticamente viene assegnato il colore clWhite, che è troppo vicino allo sfondo (clBtnFace).

Se lo cambio, la prossima serie che viene aggiunta prende clWhite. Così a corto di tornare indietro e cambiarlo dopo aver creato tutte le altre serie, c'è un modo per dire al TChart che non voglio che nessuna delle mie serie sia clWhite?

Quando una serie viene aggiunta a TChart, TChart le assegna un colore. Voglio che non assegni clWhite.

È stato utile?

Soluzione

OK, non uno a cui rinunciare facilmente, ho fatto qualche ricerca in più. Esiste una variabile unitaria chiamata ColorPalette di tipo TColorArray nell'unità TeeProcs . Se trovo e sostituisco il bianco con un colore diverso che lo risolve. Potrebbe esserci una copia dell'istanza. Continuerò a cercare poiché sarebbe preferibile.

Per ripristinare ColorPalette indietro, basta chiamare il metodo dell'unità SetDefaultColorPalette nella stessa unità.

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;

A proposito, non posso accettare come risposta perché ho posto anche la domanda, ma l'ho testata e funziona.

Altri suggerimenti

Quasi come posso dire dal modulo TeeCharts; no non puoi specificare un colore che non dovrebbe essere come viene spedito.
È possibile programmare a livello di codice tutte le voci TLineSeries assicurandosi in fase di esecuzione che non utilizzino clWhite. Supponiamo di avere una matrice di colori accettabili clArray, è possibile utilizzare il codice seguente per impostare i colori di ciascuna delle voci tLineSeries in fase di esecuzione.

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;

È possibile utilizzare i metodi della serie ClearPalette quindi AddPalette per creare la tavolozza personalizzata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top