HotXLS-Dokumentation

XlsGetDrawingThemeColor-Funktion

Unit: lxHandle
Stellt den Themen-Idx + Tönung wieder her, der zuvor vom Aufrufer an XlsApplyThemeColorToDrawing für einen bestimmten Zeichnungsfarb-Slot übergeben wurde. Gibt True mit beiden Ausgabewerten zurück, wenn die In-Memory-Seitentabelle der Arbeitsmappe einen Eintrag für den Slot hat; gibt False zurück andernfalls, sodass der Aufrufer auf ColorFormat.RGB zurückfallen kann Verfügbar seit v2.64.0 (Diagramm-Backlog Wave D Phase 7)

Syntax

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

Parameter

ColorFormat — der abzufragende Zeichnungsfarb-Slot (dasselbe Handle, das an XlsApplyThemeColorToDrawing übergeben wurde)
Workbook — die Host-TXLSWorkbook — die Seitentabelle befindet sich auf der Workbook-Instanz, nicht auf dem Farb-Slot
ThemeIdx (Ausgabe) — der aufgezeichnete 0-basierte Themen-Slot, wenn die Funktion True zurückgibt; 0 andernfalls
Tint (Ausgabe) — die aufgezeichnete Tönung im Bereich -1.0 .. +1.0, wenn die Funktion True zurückgibt; 0 andernfalls

Hinweise

Die Seitentabelle ist nach (ColorFormat._Container, ColorFormat._Pid) indiziert — derselbe Schlüssel, den der Setter verwendet. Dieselbe Form + dieselbe Eigenschafts-ID landet immer auf demselben Eintrag, sodass aufeinanderfolgende XlsApplyThemeColorToDrawing-Aufrufe sich gegenseitig überschreiben, anstatt eine Geschichte anzuhäufen
Einzelprozess-Bereich. Die Seitentabelle wird nicht auf der Festplatte serialisiert — BIFF8 OfficeArt hat keinen Themenfarb-Slot in seinem On-Disk-Format, sodass die Themen-Absicht selbst nicht gespeichert werden kann, nur der aufgelöste RGB. Nach SaveAs oder Open ist die Arbeitsmappe eine neue TXLSWorkbook-Instanz, deren Seitentabelle leer ist, und dieses Getter gibt False für jede Abfrage zurück. Anwendungscode, der eine dauerhafte Absicht benötigt, sollte seinen eigenen Zustand neben der Arbeitsmappe halten
Das Aufrufen des Getters mit einem Slot, der über einfaches ColorFormat.RGB (anstatt XlsApplyThemeColorToDrawing) gesetzt wurde, gibt ebenfalls False zurück — es gab keine Themen-Absicht zu merken, RGB ist die Wahrheitsquelle

Beispiel

Durchläuft die Formen des ersten Tabellenblatts und schreibt den Themen-Idx + Tönung ins Protokoll, wenn einer vorhanden ist, fällt andernfalls auf den rohen RGB zurück

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;

Siehe auch