HotXLS-documentatie

XlsGetDrawingThemeColor functie

Eenheid: lxHandle
Haalt de thema idx + tint terug die een aanroeper eerder doorgaf aan XlsApplyThemeColorToDrawing voor een opgegeven tekenkleurslot. Geeft True terug met beide out-waarden gevuld wanneer the workbook's in-memory side-table has an entry for the slot; returns False anders, zodat de aanroeper kan doorvallen naar ColorFormat.RGB Beschikbaar sinds v2.64.0 (chart backlog wave D fase 7)

Syntaxis

function XlsGetDrawingThemeColor(
  ColorFormat : TXLSColorFormat;
  Workbook    : TXLSWorkbook;
  out ThemeIdx: Word;
  out Tint    : Double): Boolean;

Parameters

ColorFormat — het tekenkleurslot om op te vragen (dezelfde handler die aan XlsApplyThemeColorToDrawing werd doorgegeven)
Workbook — de host-TXLSWorkbook — de side-table leeft op de werkmapinstantie, niet op het kleurslot
ThemeIdx (out) — het vastgelegde 0-based themaslot wanneer de functie True teruggeeft; anders 0
Tint (out) — de vastgelegde tint in het bereik -1.0 .. +1.0 wanneer de functie True teruggeeft; anders 0

Opmerkingen

De side-table wordt gecodeerd met (ColorFormat._Container, ColorFormat._Pid) — dezelfde key die de setter gebruikt. Dezelfde shape + dezelfde eigenschap-id landt altijd op dezelfde regel, dus opeenvolgende XlsApplyThemeColorToDrawing -aanroepen overschrijven elkaar in plaats van geschiedenis op te hopen
Single-process-scope. De side-table wordt niet naar schijf geserialiseerd — BIFF8 OfficeArt heeft in zijn on-disk-formaat geen themakleurslot, dus de thema-intentie zelf kan niet worden bewaard; alleen de herleide RGB wordt vastgelegd. Na SaveAs of Open is de werkmap een verse TXLSWorkbook -instantie waarvan de side-table leeg is, en geeft deze getter bij elke query False terug. Toepassingscode die de intentie blijvend wil vasthouden, moet zijn eigen status naast de werkmap bijhouden
Roep je de getter aan met een slot dat via een gewone ColorFormat.RGB is ingesteld (in plaats van via XlsApplyThemeColorToDrawing), dan geeft die ook False terug — er was geen thema-intentie om te bewaren; de RGB is leidend

Voorbeeld

Loopt door de vormen van het eerste werkblad en schrijft thema idx + tint naar het logboek wanneer die aanwezig zijn, met de ruwe RGB als terugval

var
  i        : Integer;
  Shape    : TXLSShape;
  ThemeIdx : Word;
  Tint     : Double;
begin
  for i := 0 to Workbook.Worksheets[1].Shapes.Count - 1 do
  begin
    Shape := Workbook.Worksheets[1].Shapes.Items[i];

    if XlsGetDrawingThemeColor(Shape.Fill.ForeColor, Workbook, ThemeIdx, Tint)
    then
      LogLine(Format('shape %d: theme=%d tint=%.2f', [i, ThemeIdx, Tint]))
    else
      LogLine(Format('shape %d: rgb=%.8x',         [i, Shape.Fill.ForeColor.RGB]));
  end;
end;

Zie ook