单元:lxHandle
语法
function XlsGetDrawingThemeColor(
ColorFormat : TXLSColorFormat;
Workbook : TXLSWorkbook;
out ThemeIdx: Word;
out Tint : Double): Boolean;
参数
ColorFormat — 要查询的绘图颜色槽位(即传给 XlsApplyThemeColorToDrawing 的同一句柄)
Workbook — 宿主 TXLSWorkbook — 侧表存在于工作簿实例上,而非颜色槽位上
ThemeIdx (out) — 当函数返回 True 时记录基于 0 的主题槽位;否则为 0
Tint (out) — 当函数返回 True 时记录的范围在 -1.0 .. +1.0 之间的色调;否则为 0
备注
侧表以 (ColorFormat._Container, ColorFormat._Pid) 作为键 — 与设置器使用的键相同。同一形状 + 同一属性 id 总是落在同一条目上,因此连续的 XlsApplyThemeColorToDrawing 调用会相互覆盖,而不是累积历史
单进程范围。 侧表不会被序列化到磁盘 — BIFF8 OfficeArt 在其磁盘格式中没有主题颜色槽位,因此主题意图本身无法持久化,只有解析后的 RGB 可以。在 SaveAs 或 Open 之后,工作簿是一个全新的 TXLSWorkbook 实例,其侧表为空,此 getter 对每次查询都返回 False。需要持久意图的应用程序代码应随工作簿自行保存状态
对通过普通 ColorFormat.RGB(而不是 XlsApplyThemeColorToDrawing)设置的槽位调用 getter 也会返回 False — 没有需要记住的主题意图,RGB 才是事实来源
示例
遍历第一个工作表的形状,当存在主题 idx + 色调时将其写入日志,否则回退到原始 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;
请参阅