Docs HotXLS

Fonction XlsApplyThemeColorToDrawing

Unité : lxHandle
Applique l'un des 12 emplacements de couleur de thème Office (plus une teinte facultative) à un TXLSColorFormat côté dessin — le même handle que FillFormat.ForeColor et LineFormat.ForeColor exposent sur les formes et les éléments de graphique. Disponible depuis v2.62.0 (vague D du backlog de graphiques, phase 5). v2.64.0 (phase 7) a ajouté une table secondaire en mémoire au niveau du classeur afin qu'un appel ultérieur à XlsGetDrawingThemeColor dans le même processus puisse récupérer l'idx + la teinte du thème d'origine
Utilisez cet utilitaire lorsque l'application souhaite que les remplissages de graphiques, les couleurs de ligne de graphiques ou les remplissages de formes suivent la palette de thème du classeur de la même manière que les cellules le font via Interior.SetThemeColor

Syntaxe

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

Paramètres

ColorFormat — l'emplacement de couleur de dessin à mettre à jour. Généralement le ForeColor d'un TXLSFillFormat ou d'un TXLSLineFormat
Workbook — le TXLSWorkbook hôte. Nécessaire pour résoudre la palette de thème et conserver la table secondaire en mémoire
ThemeIdx — emplacement de thème à base 0 (0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — ajustement d'éclaircissement/assombrissement de type spec dans la plage -1.0 .. +1.0

Remarques

L'utilitaire effectue deux écritures par appel :
Pourquoi mono-processus uniquement. Le ColorRef 4 octets de BIFF8 OfficeArt encode les variantes indexées / RGB / scheme / sysColor, mais il n'existe aucun enregistrement d'extension analogue à XFExt $087D où l'idx + la teinte du thème pourraient persister. La limitation du cycle Enregistrer / Ouvrir est donc structurelle au format de fichier, et non une lacune de HotXLS. Après rechargement, le classeur est une nouvelle instance de TXLSWorkbook avec une table secondaire vide et XlsGetDrawingThemeColor renvoie False, en retombant sur ColorFormat.RGB
Pour les couleurs de cellule qui traversent le cycle Enregistrer / Ouvrir, utilisez plutôt les points d'entrée dédiés IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor — ils exploitent l'enregistrement secondaire de couleur riche XFExt $087D pour faire traverser l'idx + la teinte du thème verbatim dans Excel 2007+

Exemple

Recolore le remplissage uni d'une forme en accent5 avec une teinte 25 % plus sombre, puis relit l'intention de thème depuis la table secondaire du classeur pour l'afficher dans un panneau de propriétés. Après SaveAs / Open, la table secondaire recommence vide ; les appelants qui ont besoin d'une intention persistante doivent donc conserver leur propre état

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;

Voir aussi