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
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 :
- Blob d'options OfficeArt (sur disque). L'idx + la teinte du thème sont résolus via la palette de thème BIFF du classeur en un RGB concret et écrits dans l'emplacement de couleur de dessin. BIFF8 OfficeArt est un format binaire antérieur à Office 2007 sans encodage natif de couleur de thème ; c'est donc le seul élément qui survit à Enregistrer / Ouvrir
- Table secondaire en mémoire sur le classeur (v2.64.0+). Le setter enregistre également les
(ThemeIdx, Tint) d'origine dans TXLSWorkbook.FDrawingThemeColors, indexés par (ColorFormat._Container, ColorFormat._Pid). Le lecteur associé XlsGetDrawingThemeColor récupère ces valeurs dans le même processus. Redéfinir le même emplacement écrase l'entrée, de sorte que la table secondaire suit la dernière intention plutôt que d'accumuler un historique
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
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