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

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

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

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

Сообщение artem78 » 30.10.2024 15:08:23

Хочу использвать собственные цвета вместо стандартных в круговой диаграмме 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


Как тогда это сделать? Спасибо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
artem78
новенький
 
Сообщения: 48
Зарегистрирован: 09.08.2015 18:52:24

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

Сообщение iskander » 30.10.2024 17:38:12

А если так попробовать:
Код: Выделить всё
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;
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

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

Сообщение artem78 » 30.10.2024 20:29:05

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

Добавлено спустя 33 минуты 29 секунд:
Наверно, проще будет задать поле цвета в ds.FieldColor и получать цвет в SQL-запросе.
artem78
новенький
 
Сообщения: 48
Зарегистрирован: 09.08.2015 18:52:24


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

Рейтинг@Mail.ru