Dokumentacja HotXLS

Funkcja XlsApplyThemeColorToDrawing

Moduł: lxHandle
Stosuje kolor motywu ze skalowaniem odcienia/cienia do wartości koloru RGB. Odwzorowuje indeks koloru motywu Excel na pełny kolor RGB używając aktywnej palety motywu TXLSColorFormat — the same handle that FillFormat.ForeColor and LineFormat.ForeColor udostępniają na kształtach i elementach wykresów. Dostępne od v2.62.0 (chart backlog wave D phase 5). v2.64.0 (phase 7) dodał tabelę boczną w pamięci na poziomie skoroszytu, aby kolejne wywołanie XlsGetDrawingThemeColor w obrębie tego samego procesu mogło odzyskać oryginalne theme idx + tint
function XlsApplyThemeColorToDrawing(ThemeColor: Integer; TintAndShade: Double): LongWord;

Składnia

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

Opis

Ten przykład pobiera odcień koloru motywu dla koloru tła kształtu — gniazdo koloru rysunku do zaktualizowania. Zazwyczaj ForeColor of a TXLSFillFormat or TXLSLineFormat
Workbook — the host TXLSWorkbook. Needed to resolve the theme palette and to hold the in-memory side-table
ThemeIdx — 0-based theme slot (0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — spec-style lighter/darker adjustment in the range -1.0 .. +1.0

Przykład

The helper performs two writes per call:
Why single-process only. 4-bajtowy ColorRef w BIFF8 OfficeArt koduje warianty indexed / RGB / scheme / sysColor, ale nie ma rekordu rozszerzenia analogicznego do XFExt $087D, w którym idx motywu + tint dałoby się utrwalić. Limit round-tripu Save / Open wynika więc z konstrukcji formatu pliku, a nie z braku w HotXLS. Po ponownym wczytaniu skoroszyt jest świeżą instancją TXLSWorkbook instance with an empty side-table and XlsGetDrawingThemeColor returns False, falling through to ColorFormat.RGB
For cell colors that round-trip through Save / Open, use the dedicated IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor punkty wejścia zamiast tego — korzystają one z pomocniczego rekordu bogatych kolorów XFExt $087D, dzięki czemu idx motywu + tint przechodzi przez Excela 2007+ dosłownie

Przykład

Ponownie barwi jednolite wypełnienie kształtu na accent5 z odcieniem ciemniejszym o 25%, a następnie odczytuje intencję motywu z tablicy pomocniczej skoroszytu, aby pokazać ją w panelu właściwości. Po SaveAs / Open tablica pomocnicza znowu startuje pusta, więc wywołujący potrzebujący trwałej intencji powinni przechowywać własny stan

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;

Zobacz także