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