单元: lxHandle
语法
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 — spec 风格的变亮/变暗调整,范围在 -1.0 .. +1.0
备注
该辅助函数每次调用执行两次写入:
- OfficeArt opt blob(磁盘上)。 主题 idx + 色调会通过工作簿的 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 的可持久保存主题 idx + 色调的扩展记录。因此 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;
请参阅