Documentação do HotXLS

Função XlsGetDrawingThemeColor

Unidade: lxHandle
Recupera a posição de tema + tonalidade que um chamador transmitiu anteriormente para XlsApplyThemeColorToDrawing para uma determinada posição de cor do desenho. Devolve True com ambos os valores de saída preenchidos quando a tabela lateral em memória do livro tem uma entrada para a posição; devolve False caso contrário, para que o chamador possa recorrer a ColorFormat.RGB . Disponível desde v2.64.0

Sintaxe

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

Parâmetros

ColorFormat — a posição de cor do desenho a consultar (mesmo identificador que foi passado para XlsApplyThemeColorToDrawing)
Workbook — o TXLSWorkbook anfitrião — a tabela lateral reside na instância do livro, não na posição de cor
ThemeIdx (saída) — a posição de tema de base 0 registada quando a função devolve True; 0 caso contrário
Tint (saída) — a tonalidade registada no intervalo -1.0 .. +1.0 quando a função devolve True; 0 caso contrário

Observações

A tabela lateral é indexada por (ColorFormat._Container, ColorFormat._Pid) — a mesma chave que o setter utiliza. A mesma forma + o mesmo id de propriedade aterra sempre na mesma entrada, pelo que chamadas XlsApplyThemeColorToDrawing sucessivas apenas actualizam o registo existente
Âmbito de processo único. A tabela lateral não é serializada para disco — o OfficeArt BIFF8 não tem uma posição de cor de tema no seu formato em disco, pelo que a intenção de tema em si não pode ser persistida, apenas o RGB resolvido SaveAs or Open, the workbook is a fresh TXLSWorkbook novo, cuja tabela lateral está vazia, e este getter devolve False para qualquer consulta. O código da aplicação que precise de intenção persistente deve manter o seu próprio estado junto ao livro
Chamar o getter com uma posição definida via ColorFormat.RGB simples (em vez de XlsApplyThemeColorToDrawing) também devolve False — não havia nenhuma intenção de tema registada

Exemplo

Percorre as formas da primeira folha de cálculo e escreve a posição de tema + tonalidade no registo quando uma está 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;

Ver também