Модуль: 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);
Параметры
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
Примечания
Вспомогательная функция выполняет два операции записи за один вызов
- Блоб OfficeArt на диске. Индекс темы и оттенок преобразуются через палитру тем BIFF книги в конкретный RGB и записываются в цветовой слот рисунка. BIFF8 OfficeArt — двоичный формат до Office 2007 без нативного кодирования цвета темы, поэтому это единственная часть, которая переживает Save / Open
- Внутренняя таблица книги в памяти (v2.64.0+). Сеттер также сохраняет исходные
(ThemeIdx, Tint) в TXLSWorkbook.FDrawingThemeColors с ключом (ColorFormat._Container, ColorFormat._Pid). Связанный читатель XlsGetDrawingThemeColor возвращает эти значения в пределах того же процесса. Повторная установка того же слота перезаписывает запись, так что таблица состояния отслеживает последнее намерение, а не копит историю
Только для одного процесса. 4-байтовый ColorRef OfficeArt BIFF8 кодирует варианты индекс/RGB/схема/системный цвет, однако нет записи расширения, аналогичной XFExt $087D, в которой мог бы сохраняться индекс темы + оттенок. Таким образом, ограничение на round-trip Save / Open является структурным для формата файла, а не недочётом HotXLS. После перезагрузки рабочая книга является свежим экземпляром TXLSWorkbook с пустой таблицей соответствия, и XlsGetDrawingThemeColor возвращает False, возвращаясь к ColorFormat.RGB
Пример
Перекрашивает сплошную заливку фигуры в 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;
См. также