Documentación de HotXLS

Función XlsApplyThemeColorToDrawing

Unidad: lxHandle
Aplica una de las 12 ranuras de color del tema de Office (más un tinte opcional) a un TXLSColorFormat del lado de dibujo — el mismo identificador que FillFormat.ForeColor y LineFormat.ForeColor exponen en formas y elementos de gráfico. Disponible desde la versión v2.62.0. La versión v2.64.0 agregó una tabla lateral en memoria a nivel de libro de trabajo para que una llamada posterior a XlsGetDrawingThemeColor dentro del mismo proceso pueda recuperar el índice de tema original + tinte
Use este asistente cuando la aplicación desee que los rellenos de gráfico, los colores de línea de gráfico o los rellenos de forma sigan la paleta de temas del libro de trabajo de la misma manera que las celdas lo hacen mediante Interior.SetThemeColor

Sintaxis

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

Parámetros

ColorFormat — la ranura de color de dibujo a actualizar. Generalmente el ForeColor de un TXLSFillFormat o TXLSLineFormat
Workbook — el TXLSWorkbook anfitrión. Necesario para resolver la paleta de temas y contener la tabla lateral en memoria
ThemeIdx — ranura de tema basada en 0 (0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — ajuste de aclarado/oscurecido según especificación en el rango -1.0 .. +1.0

Observaciones

El asistente realiza dos escrituras por llamada:
Por qué solo en un proceso. El ColorRef de 4 bytes de BIFF8 OfficeArt codifica variantes de indexado/RGB/esquema/sysColor, pero no hay ningún registro de extensión análogo a XFExt $087D donde el índice de tema + tinte pudieran persistir. Después de recargar, el libro de trabajo es una instancia nueva de TXLSWorkbook con una tabla lateral vacía y XlsGetDrawingThemeColor devuelve False, recurriendo a ColorFormat.RGB
Para los colores de celda que persisten en los ciclos de Save / Open, use los puntos de entrada dedicados IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor en su lugar

Ejemplo

Recolorea el relleno sólido de una forma a accent5 con un tinte 25% más oscuro, luego lee la intención del tema de la tabla lateral del libro de trabajo para mostrarla en un panel de propiedades. Después de SaveAs / Open la tabla lateral vuelve a estar vacía, por lo que los llamadores que necesiten intención persistente deben mantener su propio 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;

Véase también