HotXLS-dokumentation

XlsGetDrawingThemeColor funktion

Enhed: lxHandle
Gendanner tema-idx + toning, som en kalder tidligere overgav til XlsApplyThemeColorToDrawing for en given drawing-farveplads. Returnerer True med begge out-værdier udfyldt, når projektmappens in-memory-sidetabel har en post for pladsen; returnerer False ellers, så kalderen kan falde igennem til ColorFormat.RGB Tilgængelig siden v2.64.0 (chart backlog wave D fase 7)

Syntaks

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

Parametre

ColorFormat — den drawing-farveplads, der skal forespørges (samme handle, som blev overgivet til XlsApplyThemeColorToDrawing)
Workbook — den overordnede TXLSWorkbook — sidetabellen lever på projektmappeinstansen, ikke på farvepladsen
ThemeIdx (out) — den registrerede 0-baserede temaplads, når funktionen returnerer True; ellers 0
Tint (out) — den registrerede toning i området -1.0 .. +1.0, når funktionen returnerer True; ellers 0

Bemærkninger

Sidetabellen er nøglet på (ColorFormat._Container, ColorFormat._Pid) — den samme nøgle, som setter'en bruger. Samme figur + samme egenskabs-id rammer altid den samme post, så efterfølgende XlsApplyThemeColorToDrawing-kald overskriver hinanden frem for at akkumulere historik
Enkeltproces-omfang. Sidetabellen serialiseres ikke til disk — BIFF8 OfficeArt har ingen temafarveplads i sit on-disk-format, så temahensigten selv kan ikke bevares, kun den opløste RGB kan. Efter SaveAs eller Open er projektmappen en frisk TXLSWorkbook-instans, hvis sidetabel er tom, og denne getter returnerer False for hver forespørgsel. Programkode, der har brug for vedvarende hensigt, bør holde sin egen tilstand ved siden af projektmappen
At kalde getter'en med en plads, der blev sat via almindelig ColorFormat.RGB (i stedet for XlsApplyThemeColorToDrawing), returnerer også False — der var ingen temahensigt at huske, RGB'en er kilden til sandheden

Eksempel

Går gennem det første regnearks figurer og skriver tema-idx + toning til loggen, når en er til stede, og falder tilbage til den rå RGB ellers

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;

Se også