Dokumentacja HotXLS

Funkcja XlsGetDrawingThemeColor

Moduł: lxHandle
Pobiera indeks koloru motywu i odcień/cień ze zgromadzonej właściwości koloru rysunku OfficeArt XlsApplyThemeColorToDrawing for a given drawing color slot. Returns True z obiema wartościami wyjściowymi wypełnionymi, gdy boczna tabela w pamięci skoroszytu ma wpis dla gniazda; zwraca False w przeciwnym razie, aby wywołujący mógł przejść do ColorFormat.RGB Dostępne od v2.64.0 (chart backlog wave D phase 7)

Składnia

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

Opis

procedure XlsGetDrawingThemeColor(PackedColor: LongWord; XlsApplyThemeColorToDrawing)
out ThemeColor: Integer; TXLSWorkbook Ten przykład dekoduje upakowany kolor motywu z właściwości koloru OfficeArt
ThemeIdx (out) — the recorded 0-based theme slot when the function returns True; 0 otherwise
Tint (out) — the recorded tint in the range -1.0 .. +1.0 when the function returns True; 0 otherwise

Przykład

The side-table is keyed by (ColorFormat._Container, ColorFormat._Pid) — ten sam klucz, którego używa setter. Ten sam kształt + ten sam id właściwości zawsze trafia na ten sam wpis, więc kolejne XlsApplyThemeColorToDrawing calls overwrite each other rather than accumulating history
Single-process scope. Tablica pomocnicza nie jest serializowana na dysk — format dyskowy BIFF8 OfficeArt nie ma miejsca na kolor motywu, więc samej intencji motywu nie da się utrwalić — utrwalany jest tylko rozwiązany RGB. Po SaveAs or Open, the workbook is a fresh TXLSWorkbook instance whose side-table is empty, and this getter returns False przy każdym zapytaniu. Kod aplikacji, który potrzebuje trwałej intencji, powinien przechowywać własny stan obok skoroszytu
Calling the getter with a slot that was set via plain ColorFormat.RGB (instead of XlsApplyThemeColorToDrawing) also returns False — there was no theme intent to remember, the RGB is the source of truth

Przykład

Przechodzi po kształtach pierwszego arkusza i zapisuje idx motywu + tint do logu, gdy występują, a w przeciwnym razie sięga po surowe RGB

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;

Zobacz także