Модуль: lxHandle
Восстанавливает индекс темы + оттенок, ранее переданные вызывающей стороной в
XlsApplyThemeColorToDrawing для данного слота цвета рисования. Возвращает
True с заполненными обоими выходными значениями, если внутрипроцессная таблица соответствия рабочей книги содержит запись для этого слота; в противном случае возвращает
False, позволяя вызывающей стороне перейти к
ColorFormat.RGB. Доступно с версии v2.64.0 (фаза 7 волны D очереди диаграмм)
Синтаксис
function XlsGetDrawingThemeColor(
ColorFormat : TXLSColorFormat;
Workbook : TXLSWorkbook;
out ThemeIdx: Word;
out Tint : Double): Boolean;
Параметры
ColorFormat — слот цвета рисования для запроса (тот же дескриптор, что был передан в XlsApplyThemeColorToDrawing)
Workbook — хост-объект TXLSWorkbook — таблица соответствия находится в экземпляре рабочей книги, а не в слоте цвета
ThemeIdx (out) — записанный слот темы с отсчётом от 0, когда функция возвращает True; 0 в остальных случаях
Tint (out) — записанный оттенок в диапазоне -1.0 .. +1.0, когда функция возвращает True; 0 в остальных случаях
Примечания
Таблица соответствия индексируется по (ColorFormat._Container, ColorFormat._Pid) — тем же ключом, что использует метод установки. Одна и та же фигура + один и тот же идентификатор свойства всегда ведут к одной и той же записи, поэтому последовательные вызовы XlsApplyThemeColorToDrawing перезаписывают друг друга, а не накапливают историю
Область действия — один процесс. Таблица соответствия не сериализуется на диск — OfficeArt BIFF8 не имеет слота цвета темы в формате на диске, поэтому само намерение темы не может быть сохранено, только разрешённый RGB. После SaveAs или Open рабочая книга является свежим экземпляром TXLSWorkbook, таблица соответствия которого пуста, и данная функция возвращает False для каждого запроса. Код приложения, которому нужно постоянное намерение, должен хранить собственное состояние
Вызов функции получения для слота, установленного через обычный ColorFormat.RGB (вместо XlsApplyThemeColorToDrawing), также возвращает False — не было намерения темы для запоминания, RGB является источником истины
Пример
Обходит фигуры на первом листе и записывает в журнал индекс темы + оттенок, если они присутствуют, иначе возвращается к необработанному RGB
var
i : Integer;
Shape : TXLSShape;
ThemeIdx : Word;
Tint : Double;
begin
for i := 0 to Workbook.Worksheets[1].Shapes.Count - 1 do
begin
Shape := Workbook.Worksheets[1].Shapes.Items[i];
if XlsGetDrawingThemeColor(Shape.Fill.ForeColor, Workbook, ThemeIdx, Tint)
then
LogLine(Format('shape %d: theme=%d tint=%.2f', [i, ThemeIdx, Tint]))
else
LogLine(Format('shape %d: rgb=%.8x', [i, Shape.Fill.ForeColor.RGB]));
end;
end;
См. также