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