Eenheid: lxHandle
Wijst één van de 12 Office-themakleursloten (plus een optionele tint) toe aan een kleurformaat aan tekenkant,
TXLSColorFormat — dezelfde handler die
FillFormat.ForeColor en
LineFormat.ForeColor op vormen en grafekelementen blootleggen. Beschikbaar sinds v2.62.0 (chart backlog wave D fase 5). v2.64.0 (fase 7) voegde een werkmapbrede in-memory side-table toe, zodat een volgende
XlsGetDrawingThemeColor-aanroep binnen hetzelfde proces de oorspronkelijke thema idx + tint kan terughalen
Gebruik deze helper wanneer de toepassing wil dat grafiekvullingen, grafieklijnkleuren of vormvullingen het themapalet van de werkmap volgen op dezelfde manier als cellen dat via
Interior.SetThemeColor doen
Syntaxis
procedure XlsApplyThemeColorToDrawing(
ColorFormat: TXLSColorFormat;
Workbook : TXLSWorkbook;
ThemeIdx : Word;
Tint : Double);
Parameters
Workbook — de host-TXLSWorkbook. Nodig om het themapalet te herleiden en de in-memory side-table vast te houden
ThemeIdx — 0-based themaslot
(0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — aanpassing lichter/donkerder in spec-stijl, in het bereik -1.0 .. +1.0
Opmerkingen
De helper voert per aanroep twee schrijfacties uit:
- OfficeArt opt blob (on disk). Het thema idx + tint wordt via het BIFF-themapalet van de werkmap herleid naar een concrete RGB en in het tekenkleurslot weggeschreven. BIFF8 OfficeArt is een binair pre-Office-2007-formaat zonder native themakleurcodering, dus dit is het enige deel dat Save / Open overleeft
- In-memory side-table op de werkmap (v2.64.0+). De setter legt de oorspronkelijke
(ThemeIdx, Tint) in TXLSWorkbook.FDrawingThemeColors vast, met (ColorFormat._Container, ColorFormat._Pid) als key. De bijbehorende XlsGetDrawingThemeColor-lezer haalt die waarden binnen hetzelfde proces weer op. Het opnieuw instellen van hetzelfde slot overschrijft de regel, dus de side-table bewaart de laatste intentie in plaats van geschiedenis op te hopen
Waarom alleen single-process. De 4-byte ColorRef van BIFF8 OfficeArt codeert indexed / RGB / scheme / sysColor-varianten, maar er is geen extensierecord analoog aan XFExt $087D waarin het thema idx + tint kon worden bewaard. De begrenzing van de Save / Open-roundtrip zit dus structureel in het bestandsformaat en is geen HotXLS-leemte. Na herladen is de werkmap een verse TXLSWorkbook -instantie met een lege side-table en geeft XlsGetDrawingThemeColor False terug, met uitval naar ColorFormat.RGB
Voorbeeld
Kleurt de effen vulling van een vorm om naar accent5 met 25% donkerdere tint en leest daarna de thema-intentie terug uit de side-table van de werkmap om die op een eigenschappenpaneel te tonen. Na SaveAs / Open begint de zijtabel weer leeg, dus aanroepers die de instelling blijvend willen vasthouden, moeten hun eigen state bijhouden
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;
Zie ook