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
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:
- Blob opt de OfficeArt (en disco). El índice de tema + tinte se resuelve a través de la paleta de temas BIFF del libro en un RGB concreto y se escribe en la ranura de color del dibujo. BIFF8 OfficeArt es un formato binario previo a Office 2007 sin codificación nativa de color de tema, así que esta es la única parte que sobrevive a Save / Open
- Tabla auxiliar en memoria del libro (v2.64.0+). El setter también registra el
(ThemeIdx, Tint) original en TXLSWorkbook.FDrawingThemeColors indexado por (ColorFormat._Container, ColorFormat._Pid). El lector complementario XlsGetDrawingThemeColor recupera esos valores dentro del mismo proceso. Volver a asignar la misma ranura sobrescribe la entrada, así que la tabla auxiliar sigue la intención más reciente en vez de acumular historial
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
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