HotXLS-documentatie

XlsApplyThemeColorToDrawing functie

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

ColorFormat — het tekenkleurslot om bij te werken. Meestal de ForeColor of a TXLSFillFormat of TXLSLineFormat
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:
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
Gebruik voor celkleuren die de Save / Open-roundtrip doorlopen de daarvoor bedoelde IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor -toegangspunten — die het XFExt $087D rich-color-side-record benutten om thema idx + tint ongewijzigd door Excel 2007+ heen te round-trippen

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