Documentazione HotXLS

Funzione XlsGetDrawingThemeColor

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