Запретить использование серии clWhite с Delphi TChart - PullRequest
2 голосов
/ 15 октября 2008

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

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

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

Ответы [ 3 ]

6 голосов
/ 15 октября 2008

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

Чтобы вернуть 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 голосов
/ 15 октября 2008

Насколько я могу судить по модулю 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 голосов
/ 15 октября 2008

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

...