2008-10-14 3 views
2

J'ai un rapport qui utilise un TChart que je gère. Une des TLineSeries ajoutées s'ajoute automatiquement à la couleur clWhite, qui est trop proche de l'arrière-plan (clBtnFace).Empêcher la série d'utiliser clWhite avec Delphi TChart

Si je le change, alors la série suivante qui est ajoutée prend clWhite. Si loin de revenir en arrière et de le changer après que toutes les autres séries ont été créées, y a-t-il un moyen de dire au TChart que je ne veux pas qu'une de mes séries soit clWhite?

Lorsqu'une série est ajoutée au TChart, TChart lui assigne une couleur. Je ne veux pas attribuer clWhite.

Répondre

6

OK pas un à abandonner facilement, j'ai fait un peu plus de recherche. Il y a une variable d'unité appelée ColorPalette de type TColorArray dans l'unité TeeProcs. Si je trouve et remplace le blanc avec une couleur différente qui le fixe. Il peut y avoir une copie d'instance de celui-ci. Je continuerai à chercher puisque ce serait préférable.

Pour rétablir la ColorPalette arrière juste appeler la méthode de l'unité SetDefaultColorPalette dans la même 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; 

BTW, je ne peux pas accepter comme réponse parce que je demandais trop la question, mais je l'ai essayé et il fonctionne.

2

Près de ce que je peux dire à partir du module TeeCharts; Non, vous ne pouvez pas spécifier une couleur qui ne devrait pas l'être.
Vous pouvez parcourir toutes les entrées TLineSeries de façon programmée en vous assurant qu'elles n'utilisent pas clWhite à l'exécution. Supposons que vous disposiez d'un tableau de couleurs acceptables clArray, vous pouvez utiliser le code suivant pour définir les couleurs de chacune des entrées tLineSeries lors de l'exécution.

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; 
+0

C'est un peu ce dont j'avais peur. –

+0

Trouvé la solution! Le tableau ColorPalette. –

0

Vous pouvez utiliser les méthodes de série ClearPalette puis AddPalette pour créer votre palette personnalisée.

+0

Je n'ai pas réussi à trouver ces méthodes. –

+0

Désolé - ce sont pour les séries 3D et de surface. – Argalatyr

Questions connexes