Модул: lxHandle
Прилага един от 12-те слота на тема на Office (плюс незадължително нюансиране) към слот за цвят на рисунката
TXLSColorFormat — същия дескриптор, достъпен от ForeColor / BackColor на фигурите
Използвайте тази помощна функция когато приложението иска запълванията на диаграми, цветовете на линиите или запълванията на фигурите да следват палитрата на темата на работната книга, по същия начин, по който клетките го правят чрез
IXLSInterior.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 opt blob (on disk). Индексът на темата плюс оттенъкът се преобразуват през BIFF палитрата на работната книга в конкретен RGB и се записват в слота за цвят на рисунката. BIFF8 OfficeArt е двоичен формат отпреди Office 2007 без собствено кодиране на тематични цветове, така че това е единствената част, която оцелява при Save / Open
- Странична таблица в паметта на работната книга (v2.64.0+). Задаването също записва оригиналното
(ThemeIdx, Tint) в TXLSWorkbook.FDrawingThemeColors, ключирано по (ColorFormat._Container, ColorFormat._Pid). Съпътстващият четец XlsGetDrawingThemeColor извлича обратно тези стойности в рамките на същия процес. Повторното задаване на същия слот презаписва записа, така че страничната таблица следи последното намерение, а не натрупва история
Защо само в един процес. BIFF8 OfficeArt 4-байтов ColorRef кодира варианти indexed / RGB / scheme / sysColor, но няма разширен запис аналогичен на XFExt $087D, където слотът за тема може да бъде постоянен
Пример
Преоцветява солидното запълване на фигура в accent5 с 25% по-тъмно нюансиране, след което чете намерението за тема обратно от вътрешната таблица на работната книга за показване в прозорец на свойства
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;
Вижте също