Documentação do HotXLS

Função XlsGetDrawingThemeColor

Unidade: lxHandle
Recupera o índice de tema + matiz que um chamador passou anteriormente para XlsApplyThemeColorToDrawing para um determinado slot de cor de desenho. Retorna True com ambos os valores de saída preenchidos quando a tabela auxiliar na memória da pasta de trabalho tem uma entrada para o slot; retorna False caso contrário, para que o chamador possa recorrer a ColorFormat.RGB. Disponível desde v2.64.0 (onda D da lista de pendências de gráfico, fase 7)

Sintaxe

function XlsGetDrawingThemeColor(
  ColorFormat : TXLSColorFormat;
  Workbook    : TXLSWorkbook;
  out ThemeIdx: Word;
  out Tint    : Double): Boolean;

Parâmetros

ColorFormat — o slot de cor de desenho a consultar (mesmo identificador que foi passado para XlsApplyThemeColorToDrawing)
Workbook — o TXLSWorkbook hospedeiro — a tabela auxiliar fica na instância da pasta de trabalho, não no slot de cor
ThemeIdx (saída) — o slot de tema baseado em 0 registrado quando a função retorna True; 0 caso contrário
Tint (saída) — a matiz registrada no intervalo -1.0 .. +1.0 quando a função retorna True; 0 caso contrário

Observações

A tabela auxiliar tem como chave (ColorFormat._Container, ColorFormat._Pid) — a mesma chave que o setter usa. A mesma forma + o mesmo id de propriedade sempre cai na mesma entrada, de modo que chamadas sucessivas de XlsApplyThemeColorToDrawing sobrescrevem umas às outras em vez de acumular histórico
Escopo de processo único. A tabela auxiliar não é serializada para disco — o OfficeArt do BIFF8 não tem slot de cor de tema em seu formato em disco, de modo que o intento de tema em si não pode persistir, apenas o RGB resolvido pode. Após SaveAs ou Open, a pasta de trabalho é uma nova instância de TXLSWorkbook cuja tabela auxiliar está vazia, e este getter retorna False para cada consulta. O código da aplicação que precisa de intento persistente deve manter seu próprio estado junto com a pasta de trabalho
Chamar o getter com um slot que foi definido via ColorFormat.RGB simples (em vez de XlsApplyThemeColorToDrawing) também retorna False — não havia intento de tema para lembrar; o RGB é a fonte da verdade

Exemplo

Percorre as formas da primeira planilha e grava o índice de tema + matiz no log quando estiver presente, recorrendo ao RGB bruto caso contrário

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;

Veja também