Документация HotXLS

Функция XlsApplyThemeColorToDrawing

Модуль: lxHandle
Применяет один из 12 слотов цветов темы Office (плюс необязательный оттенок) к стороне рисования TXLSColorFormat — того же дескриптора, который FillFormat.ForeColor и LineFormat.ForeColor предоставляют для фигур и элементов диаграмм. Доступно с версии v2.62.0 (фаза 5 волны D очереди диаграмм). В v2.64.0 (фаза 7) добавлена внутрипроцессная таблица соответствия на уровне рабочей книги, чтобы последующий вызов XlsGetDrawingThemeColor в рамках того же процесса мог восстановить исходный индекс темы + оттенок
Используйте данную вспомогательную функцию, когда приложение хочет, чтобы заливки диаграмм, цвета линий диаграмм или заливки фигур отслеживали палитру темы рабочей книги так же, как ячейки это делают через Interior.SetThemeColor

Синтаксис

procedure XlsApplyThemeColorToDrawing(
  ColorFormat: TXLSColorFormat;
  Workbook   : TXLSWorkbook;
  ThemeIdx   : Word;
  Tint       : Double);

Параметры

ColorFormat — слот цвета рисования для обновления. Обычно это ForeColor объекта TXLSFillFormat или TXLSLineFormat
Workbook — хост-объект TXLSWorkbook. Необходим для разрешения палитры темы и хранения внутрипроцессной таблицы соответствия
ThemeIdx — слот темы с отсчётом от 0 (0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — регулировка осветления/затемнения в стиле спецификации в диапазоне -1.0 .. +1.0

Примечания

Вспомогательная функция выполняет два операции записи за один вызов
Только для одного процесса. 4-байтовый ColorRef OfficeArt BIFF8 кодирует варианты индекс/RGB/схема/системный цвет, однако нет записи расширения, аналогичной XFExt $087D, в которой мог бы сохраняться индекс темы + оттенок. Таким образом, ограничение на round-trip Save / Open является структурным для формата файла, а не недочётом HotXLS. После перезагрузки рабочая книга является свежим экземпляром TXLSWorkbook с пустой таблицей соответствия, и XlsGetDrawingThemeColor возвращает False, возвращаясь к ColorFormat.RGB
Для цветов ячеек, которые сохраняются при round-trip Save / Open, используйте вместо этого выделенные точки входа IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor — они используют запись XFExt $087D rich-color side record для сохранения при round-trip индекса темы + оттенка в неизменном виде через Excel 2007+

Пример

Перекрашивает сплошную заливку фигуры в accent5 с оттенком 25% темнее, затем считывает намерение темы обратно из таблицы соответствия рабочей книги для отображения на панели свойств. После SaveAs / Open таблица соответствия снова становится пустой, поэтому вызывающие стороны, которым нужно постоянное намерение, должны хранить собственное состояние

var
  Shape    : TXLSShape;
  ThemeIdx : Word;
  Tint     : Double;
begin
  Shape := Workbook.Worksheets[1].Shapes.Items[0];
  XlsApplyThemeColorToDrawing(Shape.Fill.ForeColor, Workbook, 8, - 0.25);

  // Same process — the side-table still has the entry.
  if XlsGetDrawingThemeColor(Shape.Fill.ForeColor, Workbook, ThemeIdx, Tint)
  then
    ShowMessage(Format('theme=%d tint=%.2f', [ThemeIdx, Tint]));

  Workbook.SaveAs('ThemedShape.xls', xlExcel97);
end;

См. также