Unità: lxHandle
Recupera l'idx + tinta del tema che un chiamante aveva precedentemente passato a
XlsApplyThemeColorToDrawing
per un dato slot di colore del disegno. Restituisce
True con entrambi i valori out valorizzati quando
la side-table in memoria del workbook ha una voce per lo slot; restituisce
False
altrimenti, così il chiamante può ripiegare su
ColorFormat.RGB
Disponibile dalla v2.64.0 (chart backlog wave D fase 7)
Sintassi
function XlsGetDrawingThemeColor(
ColorFormat : TXLSColorFormat;
Workbook : TXLSWorkbook;
out ThemeIdx: Word;
out Tint : Double): Boolean;
Parametri
ColorFormat — lo slot di colore del disegno da interrogare (lo stesso handle passato a XlsApplyThemeColorToDrawing)
Workbook — il TXLSWorkbook host — la side-table vive sull'istanza del workbook, non sullo slot di colore
ThemeIdx (out) — lo slot del tema a base 0 registrato quando la funzione restituisce True; 0 altrimenti
Tint (out) — la tinta registrata nell'intervallo -1.0 .. +1.0 quando la funzione restituisce True; 0 altrimenti
Osservazioni
La side-table è indicizzata per (ColorFormat._Container, ColorFormat._Pid) — la stessa chiave usata dal setter. Stessa forma + stesso id di proprietà finiscono sempre sulla stessa voce, quindi chiamate successive a XlsApplyThemeColorToDrawing si sovrascrivono a vicenda invece di accumulare cronologia
Ambito a processo singolo. La side-table non viene serializzata su disco — BIFF8 OfficeArt non ha uno slot per il colore del tema nel suo formato su disco, quindi l'intento del tema stesso non può essere persistito, solo il RGB risolto lo può. Dopo SaveAs o Open, il workbook è una nuova istanza TXLSWorkbook la cui side-table è vuota, e questo getter restituisce False per ogni interrogazione. Il codice applicativo che necessita di un intento persistente dovrebbe mantenere il proprio stato accanto al workbook
Chiamare il getter con uno slot impostato tramite il semplice ColorFormat.RGB (invece di XlsApplyThemeColorToDrawing) restituisce anch'esso False — non c'era alcun intento del tema da ricordare, il RGB è la fonte di verità
Esempio
Scorre le forme del primo foglio di lavoro e scrive l'idx + tinta del tema nel log quando è presente, ripiegando altrimenti sul RGB grezzo
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;
Vedere anche