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
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:
- OfficeArt-Opt-Blob (auf der Platte). Der Theme-Index plus Tint wird über die BIFF-Theme-Palette der Arbeitsmappe in ein konkretes RGB aufgelöst und in den Zeichnungsfarbplatz geschrieben. BIFF8 OfficeArt ist ein binäres Format vor Office 2007 ohne native Theme-Farbkodierung, daher ist dies der einzige Teil, der Save/Open überlebt
- In-Memory-Nebentabelle in der Arbeitsmappe (v2.64.0+). Der Setter zeichnet außerdem das ursprüngliche
(ThemeIdx, Tint) in TXLSWorkbook.FDrawingThemeColors auf, indiziert über (ColorFormat._Container, ColorFormat._Pid). Der zugehörige Reader XlsGetDrawingThemeColor liest diese Werte im selben Prozess wieder aus. Ein erneutes Setzen desselben Platzes überschreibt den Eintrag, sodass die Nebentabelle die aktuellste Absicht statt einer Historie verfolgt
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
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