Enhet: lxHandle
Tillämpar en av de 12 Office-temafärgsplatserna (plus en valfri ton) på en ritsida-
TXLSColorFormat — samma referens som
FillFormat.ForeColor och
LineFormat.ForeColor exponerar på former och diagramelement. Tillgänglig sedan v2.62.0 (chart backlog wave D fas 5). v2.64.0 (fas 7) lade till en minnesintern sidotabell på arbetsboksnivå så att ett efterföljande
XlsGetDrawingThemeColor-anrop i samma process kan återställa den ursprungliga tema-idx + ton
Använd den här hjälpfunktionen när programmet vill att diagramfyllningar, diagramlinjefärger eller formfyllningar ska följa arbetsbokens temapalett på samma sätt som celler gör via
Interior.SetThemeColor
Syntax
procedure XlsApplyThemeColorToDrawing(
ColorFormat: TXLSColorFormat;
Workbook : TXLSWorkbook;
ThemeIdx : Word;
Tint : Double);
Parametrar
Workbook — värd-TXLSWorkbook. Behövs för att lösa upp temapaletten och för att innehålla den minnesinterna sidotabellen
ThemeIdx — 0-baserad temaplats
(0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — spec-stils ljusare/mörkare justering i intervallet -1.0 .. +1.0
Anmärkningar
Hjälpfunktionen utför två skrivningar per anrop:
- OfficeArt-opt-blob (på disk). Tema-idx + ton löses upp genom arbetsbokens BIFF-temapalett till en konkret RGB och skrivs till ritsidans färgplats. BIFF8 OfficeArt är ett binärt format från före Office 2007 utan inbyggd temafärgskodning, så detta är den enda del som överlever Save / Open
- Minnesintern sidotabell på arbetsboken (v2.64.0+). Settern registrerar även det ursprungliga
(ThemeIdx, Tint) i TXLSWorkbook.FDrawingThemeColors med nyckel (ColorFormat._Container, ColorFormat._Pid). Den medföljande läsaren XlsGetDrawingThemeColor hämtar tillbaka dessa värden inom samma process. Att ange samma plats igen skriver över posten, så sidotabellen spårar den senaste avsikten i stället för att samla historik
Varför endast en process. BIFF8 OfficeArts 4-byte ColorRef kodar varianterna indexerad / RGB / scheme / sysColor, men det finns ingen tilläggspost som motsvarar XFExt $087D där tema-idx + ton skulle kunna bestå. Så begränsningen i Save / Open-round-trip är strukturell för filformatet, inte en lucka i HotXLS. Efter omladdning är arbetsboken en ny TXLSWorkbook-instans med en tom sidotabell och XlsGetDrawingThemeColor returnerar False, med fall till ColorFormat.RGB
Exempel
Färgar om en forms heldragna fyllning till accent5 med en 25 % mörkare ton och läser sedan tillbaka temaavsikten från arbetsbokens sidotabell för att visa den i en egenskapsruta. Efter SaveAs / Open börjar sidotabellen tom igen, så anropare som behöver bestående avsikt bör hålla sitt eget tillstånd
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;
Se även