HotXLS-Dokumentation

XlsApplyThemeColorToDrawing-Funktion

Unit: lxHandle
Wendet einen der 12 Office-Themenfarb-Slots (plus eine optionale Tönung) auf einen zeichnungsseitigen TXLSColorFormat an — dasselbe Handle, das FillFormat.ForeColor und LineFormat.ForeColor auf Formen und Diagrammelementen freilegen. Verfügbar seit v2.62.0 (Diagramm-Backlog Wave D Phase 5). v2.64.0 (Phase 7) fügte eine arbeitsmappenweite In-Memory-Seitentabelle hinzu, damit ein nachfolgender XlsGetDrawingThemeColor-Aufruf innerhalb desselben Prozesses den ursprünglichen Themen-Idx + Tönung wiederherstellen kann
Verwenden Sie dieses Hilfsprogramm, wenn die Anwendung möchte, dass Diagrammfüllungen, Diagrammlinienfarben oder Formfüllungen die Arbeitsmappen-Themenpalette auf dieselbe Weise verfolgen wie Zellen über Interior.SetThemeColor

Syntax

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

Parameter

ColorFormat — der zu aktualisierende Zeichnungsfarb-Slot. Typischerweise die ForeColor eines TXLSFillFormat oder TXLSLineFormat
Workbook — die Host-TXLSWorkbook. Wird benötigt, um die Themenpalette aufzulösen und die In-Memory-Seitentabelle zu halten
ThemeIdx — 0-basierter Themen-Slot (0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — Spezifikations-Stil Aufhellungs-/Abdunkelungsanpassung im Bereich -1.0 .. +1.0

Hinweise

Das Hilfsprogramm führt zwei Schreibvorgänge pro Aufruf durch:
Warum nur für einzelne Prozesse. Das BIFF8-OfficeArt-4-Byte-ColorRef kodiert indizierte / RGB / Schema- / sysColor-Varianten, aber es gibt keinen Erweiterungsdatensatz analog zu XFExt $087D, wo der Themen-Idx + Tönung gespeichert werden könnten. Die Einschränkung beim Speichern/Öffnen-Roundtrip ist also strukturell für das Dateiformat, keine HotXLS-Lücke. Nach dem Neuladen ist die Arbeitsmappe eine neue TXLSWorkbook-Instanz mit einer leeren Seitentabelle und XlsGetDrawingThemeColor gibt False zurück, fällt auf ColorFormat.RGB zurück
Für Zellfarben, die durch Speichern/Öffnen roundgetrippt werden, verwenden Sie stattdessen die dedizierten IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor-Einstiegspunkte — sie nutzen den XFExt-$087D-Rich-Color-Side-Record, um den Themen-Idx + Tönung wörtlich durch Excel 2007+ zu roundtrippen

Beispiel

Färbt die einfarbige Füllung einer Form auf accent5 mit einer 25% dunkleren Tönung um, liest dann die Themen-Absicht aus der Arbeitsmappen-Seitentabelle zurück, um sie in einem Eigenschaftsfenster anzuzeigen. Nach SaveAs / Open beginnt die Seitentabelle wieder leer, also sollten Aufrufer, die eine dauerhafte Absicht benötigen, ihren eigenen Zustand behalten

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;

Siehe auch