Impedisci alle serie di utilizzare clWhite con Delphi TChart
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.
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.