2008-10-14 10 views
2

У меня есть отчет, в котором используется TChart, который я поддерживаю. Одному из TLineSeries, который добавляется автоматически, присваивается цвет clWhite, который слишком близко к фону (clBtnFace).Предотвращение использования clWhite с Delphi TChart

Если я его изменю, следующая добавленная серия добавит clWhite. Так что, не вернувшись и изменив его после создания других серий, есть ли способ сказать TChart, что я не хочу, чтобы какая-либо из моих серий была clWhite?

Когда серия добавлена ​​в TChart, TChart присваивает ей цвет. Я хочу, чтобы он не назначал clWhite.

ответ

6

OK не сдаваться, я сделал несколько поисков. Существует единичная переменная под названием ColorPalette типа TColorArray в TeeProcs единица. Если я нахожу и заменяю белый цвет другим цветом, который его исправляет. Может быть экземпляр экземпляра. Я буду продолжать смотреть, так как это было бы предпочтительнее.

Для возврата к ColorPalette назад просто вызвать метод блок SetDefaultColorPalette в том же блоке.

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; 

Кстати, я не могу принять как ответ, потому что я тоже задал этот вопрос, но я проверил его и он работает.

2

Вблизи, как я могу сказать, из модуля TeeCharts; нет, вы не можете указать цвет, который не должен быть таким, каким он отправляется.
Вы можете программно пройти через все записи TLineSeries, убедившись во время выполнения, что они не используют clWhite. Скажите, что у вас есть массив допустимых цветов clArray, вы можете использовать следующий код для установки цветов каждой из записей tLineSeries во время выполнения.

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

Это то, чего я боялся. – 2008-10-14 23:48:55

+0

Нашли решение! Массив ColorPalette. – 2008-10-15 01:04:34

0

Вы можете использовать методы серии ClearPalette, затем AddPalette, чтобы создать свою пользовательскую палитру.