תיעוד HotXLS

פונקציה XlsGetDrawingThemeColor

יחידה: lxHandle
משחזר את אינדקס הנושא + גוון שמתקשר העביר בעבר ל-XlsApplyThemeColorToDrawing עבור חריץ צבע ציור נתון. מחזיר True עם שני ערכי הפלט מאוכלסים כאשר לטבלת העזר בזיכרון של חוברת העבודה יש ערך עבור החריץ; מחזיר False אחרת כדי שהמתקשר יוכל לנסוג ל-ColorFormat.RGB. זמין מגרסה v2.64.0 (גל D שלב 7 של פיגום תרשים)

תחביר

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

פרמטרים

ColorFormat — חריץ צבע הציור לשאילתה (אותו מטפל שהועבר ל-XlsApplyThemeColorToDrawing)
Workbook — ה-TXLSWorkbook המארח — טבלת העזר חיה על מופע חוברת העבודה, לא על חריץ הצבע
ThemeIdx (פלט) — חריץ הנושא המוקלט מבוסס-0 כאשר הפונקציה מחזירה True; 0 אחרת
Tint (פלט) — הגוון המוקלט בטווח -1.0 .. +1.0 כאשר הפונקציה מחזירה True; 0 אחרת

הערות

טבלת העזר מקורה לפי (ColorFormat._Container, ColorFormat._Pid) — אותו מפתח בו משתמש ה-setter. אותה צורה + אותו מזהה מאפיין תמיד מגיעים לאותו ערך, כך שקריאות עוקבות של XlsApplyThemeColorToDrawing מדרסות זו את זו במקום לצבור היסטוריה
היקף תהליך בודד. טבלת העזר אינה מסודרת לדיסק — ל-BIFF8 OfficeArt אין חריץ צבע נושא בפורמט הדיסק שלו, לכן כוונת הנושא עצמה לא יכולה להתמיד, רק ה-RGB המפוענח. לאחר SaveAs או Open, חוברת העבודה היא מופע TXLSWorkbook חדש שטבלת העזר שלו ריקה, ו-getter זה מחזיר False לכל שאילתה. קוד היישום שצריך כוונה מתמדת צריך לשמור את המצב שלו לצד חוברת העבודה
קריאה ל-getter עם חריץ שהוגדר דרך ColorFormat.RGB רגיל (במקום XlsApplyThemeColorToDrawing) גם מחזירה False — לא הייתה כוונת נושא לזכור, ה-RGB הוא מקור האמת

דוגמה

עובר על הצורות של גיליון העבודה הראשון וכותב את אינדקס הנושא + גוון ליומן כאשר אחד קיים, ונסוג ל-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;

ראה גם