Documentação do HotXLS

Função XlsApplyThemeColorToDrawing

Unidade: lxHandle
Aplica um dos 12 slots de cor de tema do Office (mais uma matiz opcional) a um slot de cor de desenho TXLSColorFormat — o mesmo identificador que FillFormat.ForeColor e LineFormat.ForeColor expõem em formas e elementos de gráfico. Disponível desde v2.62.0 (onda D da lista de pendências de gráfico, fase 5). A v2.64.0 (fase 7) adicionou uma tabela auxiliar na memória em nível de pasta de trabalho para que uma chamada subsequente a XlsGetDrawingThemeColor dentro do mesmo processo possa recuperar o índice e a matiz de tema original
Use este auxiliar quando a aplicação quiser que preenchimentos de gráfico, cores de linha de gráfico ou preenchimentos de formas acompanhem a paleta de temas da pasta de trabalho da mesma forma que as células fazem por meio de Interior.SetThemeColor

Sintaxe

procedure XlsApplyThemeColorToDrawing(
  ColorFormat: TXLSColorFormat;
  Workbook   : TXLSWorkbook;
  ThemeIdx   : Word;
  Tint       : Double);

Parâmetros

ColorFormat — o slot de cor de desenho a atualizar. Tipicamente o ForeColor de um TXLSFillFormat ou TXLSLineFormat
Workbook — o TXLSWorkbook hospedeiro. Necessário para resolver a paleta de temas e para manter a tabela auxiliar na memória
ThemeIdx — slot de tema baseado em 0 (0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — ajuste de clareamento/escurecimento no estilo da especificação no intervalo -1.0 .. +1.0

Observações

O auxiliar realiza duas gravações por chamada
Por que apenas em processo único. O ColorRef de 4 bytes OfficeArt do BIFF8 codifica variantes indexadas/RGB/esquema/sysColor, mas não há registro de extensão análogo ao XFExt $087D onde o índice e a matiz de tema poderiam persistir. Portanto, a limitação no round-trip de Save/Open é estrutural ao formato de arquivo, não uma lacuna do HotXLS. Após recarregar, a pasta de trabalho é uma nova instância de TXLSWorkbook com uma tabela auxiliar vazia e XlsGetDrawingThemeColor retorna False, recorrendo a ColorFormat.RGB
Para cores de célula que fazem round-trip por Save/Open, use os pontos de entrada dedicados IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor — eles aproveitam o registro de cor rica XFExt $087D para fazer round-trip verbatim do índice e da matiz de tema pelo Excel 2007+

Exemplo

Recolore o preenchimento sólido de uma forma para accent5 com uma matiz 25% mais escura, depois lê o intento de tema de volta da tabela auxiliar da pasta de trabalho para exibição em um painel de propriedades. Após SaveAs / Open a tabela auxiliar começa vazia novamente, de modo que os chamadores que precisam de intento persistente devem manter seu próprio estado

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;

Veja também