HotXLS 文档

XlsGetDrawingThemeColor 函数

单元:lxHandle
恢复调用方之前针对给定绘图颜色槽位传给 XlsApplyThemeColorToDrawing 的主题 idx + 色调。当工作簿的内存侧表存在该槽位的条目时,返回 True 并填充两个输出值;否则返回 False,以便调用方回退到 ColorFormat.RGB 自 v2.64.0(图表积压波 D 阶段 7)起可用

语法

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;

请参阅