Unità: lxHandle
Applica uno dei 12 slot di colore del tema di Office (più una tinta opzionale) a un lato di disegno
TXLSColorFormat — lo stesso handle che
FillFormat.ForeColor e
LineFormat.ForeColor espongono su forme ed elementi grafici. Disponibile dalla v2.62.0 (chart backlog wave D fase 5). La v2.64.0 (fase 7) ha aggiunto una side-table in memoria a livello di workbook, così una successiva chiamata a
XlsGetDrawingThemeColor all'interno dello stesso processo può recuperare l'idx + tinta del tema originali
Usa questo helper quando l'applicazione vuole che i riempimenti dei grafici, i colori delle linee dei grafici o i riempimenti delle forme seguano la palette del tema del workbook, proprio come fanno le celle tramite
Interior.SetThemeColor
Sintassi
procedure XlsApplyThemeColorToDrawing(
ColorFormat: TXLSColorFormat;
Workbook : TXLSWorkbook;
ThemeIdx : Word;
Tint : Double);
Parametri
Workbook — il TXLSWorkbook host. Necessario per risolvere la palette del tema e per contenere la side-table in memoria
ThemeIdx — slot del tema a base 0
(0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — regolazione spec-style più chiaro/scuro nell'intervallo -1.0 .. +1.0
Osservazioni
L'helper esegue due scritture per chiamata:
- Blob OfficeArt opt (su disco). L'idx + tinta del tema viene risolto tramite la palette del tema BIFF del workbook in un RGB concreto e scritto nello slot di colore del disegno. BIFF8 OfficeArt è un formato binario pre-Office-2007 senza codifica nativa del colore del tema, quindi questo è l'unico elemento che sopravvive a Save / Open
- Side-table in memoria sul workbook (v2.64.0+). Il setter registra anche l'originale
(ThemeIdx, Tint) in TXLSWorkbook.FDrawingThemeColors indicizzato per (ColorFormat._Container, ColorFormat._Pid). La lettura tramite il companion XlsGetDrawingThemeColor recupera questi valori all'interno dello stesso processo. Re-impostare lo stesso slot sovrascrive la voce, quindi la side-table traccia l'intento più recente invece di accumulare cronologia
Perché solo a processo singolo. Il ColorRef a 4 byte di BIFF8 OfficeArt codifica le varianti indexed / RGB / scheme / sysColor, ma non esiste un record di estensione analogo a XFExt $087D in cui l'idx + tinta del tema potrebbero persistere. Quindi il limite al round-trip Save / Open è strutturale al formato di file, non una lacuna di HotXLS. Dopo il ricaricamento il workbook è una nuova istanza TXLSWorkbook con side-table vuota e XlsGetDrawingThemeColor restituisce False, ripiegando su ColorFormat.RGB
Esempio
Ricolora il riempimento pieno di una forma su accent5 con una tinta più scura del 25%, poi rilegge l'intento del tema dalla side-table del workbook per visualizzarlo in un riquadro delle proprietà. Dopo SaveAs / Open la side-table ricomincia vuota, quindi i chiamanti che necessitano di un intento persistente dovrebbero mantenere il proprio stato
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;
Vedere anche