Docs HotXLS

Fonction XlsGetDrawingThemeColor

Unité : lxHandle
Récupère l'idx + la teinte du thème qu'un appelant a précédemment passés à XlsApplyThemeColorToDrawing pour un emplacement de couleur de dessin donné. Renvoie True avec les deux valeurs de sortie renseignées lorsque la table secondaire en mémoire du classeur contient une entrée pour l'emplacement ; renvoie False sinon, afin que l'appelant puisse retomber sur ColorFormat.RGB Disponible depuis v2.64.0 (vague D du backlog de graphiques, phase 7)

Syntaxe

function XlsGetDrawingThemeColor(
  ColorFormat : TXLSColorFormat;
  Workbook    : TXLSWorkbook;
  out ThemeIdx: Word;
  out Tint    : Double): Boolean;

Paramètres

ColorFormat — l'emplacement de couleur de dessin à interroger (le même handle qui a été passé à XlsApplyThemeColorToDrawing)
Workbook — le TXLSWorkbook hôte — la table secondaire vit sur l'instance du classeur, pas sur l'emplacement de couleur
ThemeIdx (out) — l'emplacement de thème à base 0 enregistré lorsque la fonction renvoie True ; 0 sinon
Tint (out) — la teinte enregistrée dans la plage -1.0 .. +1.0 lorsque la fonction renvoie True ; 0 sinon

Remarques

La table secondaire est indexée par (ColorFormat._Container, ColorFormat._Pid) — la même clé que celle utilisée par le setter. La même forme + le même identifiant de propriété tombent toujours sur la même entrée, de sorte que les appels successifs à XlsApplyThemeColorToDrawing s'écrasent mutuellement plutôt que d'accumuler un historique
Portée mono-processus. La table secondaire n'est pas sérialisée sur disque — BIFF8 OfficeArt ne possède aucun emplacement de couleur de thème dans son format sur disque, donc l'intention de thème elle-même ne peut pas être persistée, seul le RGB résolu l'est. Après SaveAs ou Open, le classeur est une nouvelle instance de TXLSWorkbook dont la table secondaire est vide, et ce getter renvoie False pour chaque requête. Le code d'application qui a besoin d'une intention persistante doit conserver son propre état aux côtés du classeur
Appeler le getter avec un emplacement défini via un simple ColorFormat.RGB (au lieu de XlsApplyThemeColorToDrawing) renvoie également False — il n'y avait aucune intention de thème à mémoriser, le RGB est la source de vérité

Exemple

Parcourt les formes de la première feuille de calcul et écrit l'idx + la teinte du thème dans le journal lorsqu'une entrée est présente, en retombant sur le RGB brut sinon

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;

Voir aussi