HotXLS-dokumentation

Funktionen XlsGetDrawingThemeColor

Enhet: lxHandle
Återställer tema-idx + ton som en anropare tidigare skickade till XlsApplyThemeColorToDrawing för en given ritsida-färgplats. Returnerar True med båda ut-värdena ifyllda när arbetsbokens minnesinterna sidotabell har en post för platsen; returnerar False annars så att anroparen kan falla till ColorFormat.RGB Tillgänglig sedan v2.64.0 (chart backlog wave D fas 7)

Syntax

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

Parametrar

ColorFormat — ritsidans färgplats som ska efterfrågas (samma referens som skickades till XlsApplyThemeColorToDrawing)
Workbook — värd-TXLSWorkbook — sidotabellen lever på arbetsboksinstansen, inte på färgplatsen
ThemeIdx (ut) — den registrerade 0-baserade temaplatsen när funktionen returnerar True; 0 annars
Tint (ut) — den registrerade tonen i intervallet -1.0 .. +1.0 när funktionen returnerar True; 0 annars

Anmärkningar

Sidotabellen är nycklad med (ColorFormat._Container, ColorFormat._Pid) — samma nyckel som settern använder. Samma form + samma egenskaps-ID hamnar alltid på samma post, så efterföljande XlsApplyThemeColorToDrawing-anrop skriver över varandra i stället för att samla historik
Endast en process. Sidotabellen serialiseras inte till disk — BIFF8 OfficeArt har ingen temafärgsplats i sitt filformat, så själva temaavsikten kan inte bestå, endast den upplösta RGB-färgen kan. Efter SaveAs eller Open är arbetsboken en ny TXLSWorkbook-instans vars sidotabell är tom, och denna getter returnerar False för varje fråga. Programkod som behöver bestående avsikt bör hålla sitt eget tillstånd tillsammans med arbetsboken
Att anropa gettern med en plats som angavs via vanlig ColorFormat.RGB (i stället för XlsApplyThemeColorToDrawing) returnerar också False — det fanns ingen temaavsikt att komma ihåg, RGB är källan till sanning

Exempel

Går igenom det första kalkylbladets former och skriver tema-idx + ton till loggen när sådan finns, med fall till den råa RGB-färgen annars

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;

Se även