TChart: Собственные цвета для круговой диаграммы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
artem78
новенький
Сообщения: 50
Зарегистрирован: 09.08.2015 17:52:24

TChart: Собственные цвета для круговой диаграммы

Сообщение artem78 »

Хочу использвать собственные цвета вместо стандартных в круговой диаграмме TChart. Данные берутся из БД, колв-о значений может быть различным. Вот так пытаюсь задать цвета хотябы для десятка значений.

Код: Выделить всё

procedure TForm1.GenerateSourcesChart({var} AChart: TChart);
const
  // Цвета как в LibreOffice
  SegmentColors: array [0..9] of TColor = (
    TColor($864500),
    TColor($0E42FF),
    TColor($20D3FF),
    TColor($1C9D57),
    TColor($21007E),
    TColor($FFCA83),
    TColor($044031),
    TColor($00CFAE),
    TColor($6F1F4B),
    TColor($0E95FF)
  );
var
  Ser: TPieSeries;
  DS: TDbChartSource;
  i:Integer;
begin
    Ser := TPieSeries.Create(AChart {nil});
    ds:=TDbChartSource.Create({nil} Ser);

  AChart.AddSeries(Ser);
  AChart.AxisVisible:=False;
  Ser.Marks.Style:=smsLabelPercent;
  ser.InnerRadiusPercent := 25 ;

  ds.DataSource:=DataModule1.SourcesStatsDataSource;
  ds.FieldY:='Кол-во броней';
  ds.FieldText:='Название';

  ser.Source:=ds;

  // Цвета
  for i :=0 to Ser.Count-1 do
  begin
	if i > High(SegmentColors) then
	  Break;

	Ser.SetColor(i, SegmentColors[i])
  end;


  Ser.Active:=True;

end; 
Естественно не работает:
VirtualBox_Windows 7_30_10_2024_14_05_42.png
Как тогда это сделать? Спасибо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

А если так попробовать:

Код: Выделить всё

procedure TForm1.GenerateSourcesChart({var} AChart: TChart);
const
  // Цвета как в LibreOffice
  SegmentColors: array [0..9] of TColor = (
    TColor($864500),
    TColor($0E42FF),
    TColor($20D3FF),
    TColor($1C9D57),
    TColor($21007E),
    TColor($FFCA83),
    TColor($044031),
    TColor($00CFAE),
    TColor($6F1F4B),
    TColor($0E95FF)
  );
var
  Ser: TPieSeries;
  DS: TDbChartSource;
  i:Integer;
begin
    Ser := TPieSeries.Create(AChart {nil});
    ds:=TDbChartSource.Create({nil} Ser);

  AChart.AddSeries(Ser);
  AChart.AxisVisible:=False;
  Ser.Marks.Style:=smsLabelPercent;
  ser.InnerRadiusPercent := 25 ;

  ds.DataSource:=DataModule1.SourcesStatsDataSource;
  ds.FieldY:='Кол-во броней';
  ds.FieldText:='Название';

  // Цвета
  for i := 0 to ds.Count-1 do
  begin
   if i > High(SegmentColors) then
     Break;
   ds[I]^.Color := SegmentColors[i];
  end;

  ser.Source:=ds;

  Ser.Active:=True;

end; 
artem78
новенький
Сообщения: 50
Зарегистрирован: 09.08.2015 17:52:24

Сообщение artem78 »

Ошибка компиляции исчезла, но цвета остались стандартные.

Добавлено спустя 33 минуты 29 секунд:
Наверно, проще будет задать поле цвета в ds.FieldColor и получать цвет в SQL-запросе.
Ответить