Запретить ряду использовать clWhite с помощью Delphi TChart

StackOverflow https://stackoverflow.com/questions/203151

Вопрос

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

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

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

Это было полезно?

Решение

Ладно, я не из тех, кто легко сдается, я провел еще несколько поисков.Существует единичная переменная, называемая Цветовая палитра типа TColorArray - цветовой массив в Чайники единица измерения.Если я найду и заменю белый на другой цвет, это исправит проблему.Там может быть его экземплярная копия.Я продолжу поиски, так как это было бы предпочтительнее.

Чтобы вернуть Цветовая палитра обратно просто вызовите метод unit 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;

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

Другие советы

Близко, насколько я могу судить по модулю 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;

Вы можете использовать методы серии ClearPalette, а затем AddPalette для создания своей пользовательской палитры.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top