Documentazione HotXLS

Funzione XlsApplyThemeColorToDrawing

Unità: lxHandle
Applica uno dei 12 slot di colore del tema di Office (più una tinta opzionale) a un lato di disegno TXLSColorFormat — lo stesso handle che FillFormat.ForeColor e LineFormat.ForeColor espongono su forme ed elementi grafici. Disponibile dalla v2.62.0 (chart backlog wave D fase 5). La v2.64.0 (fase 7) ha aggiunto una side-table in memoria a livello di workbook, così una successiva chiamata a XlsGetDrawingThemeColor all'interno dello stesso processo può recuperare l'idx + tinta del tema originali
Usa questo helper quando l'applicazione vuole che i riempimenti dei grafici, i colori delle linee dei grafici o i riempimenti delle forme seguano la palette del tema del workbook, proprio come fanno le celle tramite Interior.SetThemeColor

Sintassi

procedure XlsApplyThemeColorToDrawing(
  ColorFormat: TXLSColorFormat;
  Workbook   : TXLSWorkbook;
  ThemeIdx   : Word;
  Tint       : Double);

Parametri

ColorFormat — lo slot di colore del disegno da aggiornare. In genere il ForeColor di un TXLSFillFormat o di un TXLSLineFormat
Workbook — il TXLSWorkbook host. Necessario per risolvere la palette del tema e per contenere la side-table in memoria
ThemeIdx — slot del tema a base 0 (0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — regolazione spec-style più chiaro/scuro nell'intervallo -1.0 .. +1.0

Osservazioni

L'helper esegue due scritture per chiamata:
Perché solo a processo singolo. Il ColorRef a 4 byte di BIFF8 OfficeArt codifica le varianti indexed / RGB / scheme / sysColor, ma non esiste un record di estensione analogo a XFExt $087D in cui l'idx + tinta del tema potrebbero persistere. Quindi il limite al round-trip Save / Open è strutturale al formato di file, non una lacuna di HotXLS. Dopo il ricaricamento il workbook è una nuova istanza TXLSWorkbook con side-table vuota e XlsGetDrawingThemeColor restituisce False, ripiegando su ColorFormat.RGB
Per i colori delle celle che fanno round-trip attraverso Save / Open, usa invece i punti di ingresso dedicati IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor — sfruttano il record laterale XFExt $087D rich-color per far fare round-trip all'idx + tinta del tema senza modifiche attraverso Excel 2007+

Esempio

Ricolora il riempimento pieno di una forma su accent5 con una tinta più scura del 25%, poi rilegge l'intento del tema dalla side-table del workbook per visualizzarlo in un riquadro delle proprietà. Dopo SaveAs / Open la side-table ricomincia vuota, quindi i chiamanti che necessitano di un intento persistente dovrebbero mantenere il proprio stato

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;

Vedere anche