HotXLS 문서

XlsApplyThemeColorToDrawing 함수

유닛: lxHandle
12개 Office 테마 색상 슬롯 중 하나(선택적 색조 포함)를 드로잉 측 TXLSColorFormat에 적용합니다 — FillFormat.ForeColor와 LineFormat.ForeColor가 도형과 차트 요소에 노출하는 것과 동일한 핸들입니다. v2.62.0(차트 백로그 웨이브 D 5단계)부터 사용 가능합니다. v2.64.0(7단계)에는 같은 프로세스 내의 후속 XlsGetDrawingThemeColor 호출이 원래 테마 idx + 색조를 복구할 수 있도록 통합 문서 수준 메모리 내 사이드 테이블이 추가되었습니다
응용 프로그램이 차트 채우기, 차트 선 색상 또는 도형 채우기를 Interior.SetThemeColor를 통해 셀이 수행하는 것과 동일한 방식으로 통합 문서 테마 팔레트를 추적하게 하려는 경우 이 도우미를 사용합니다

구문

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

매개변수

ColorFormat — 업데이트할 드로잉 색상 슬롯. 일반적으로 TXLSFillFormat 또는 TXLSLineFormat의 ForeColor입니다
Workbook — 호스트 TXLSWorkbook. 테마 팔레트를 해석하고 메모리 내 사이드 테이블을 보유하는 데 필요합니다
ThemeIdx — 0 기반 테마 슬롯(0=lt1, 1=dk1, 2=lt2, 3=dk2, 4..9=accent1..6, 10=hlink, 11=foHlink)
Tint — -1.0 .. +1.0 범위의 스펙 스타일 밝게/어둡게 조정

비고

도우미는 호출당 두 번 씁니다:
단일 프로세스 전용. BIFF8 OfficeArt 4바이트 ColorRef는 인덱스/RGB/구성표/sysColor 변형을 인코딩하지만, 테마 idx + 색조가 지속될 수 있는 XFExt $087D와 유사한 확장 레코드는 없습니다. 따라서 저장/열기 왕복 전달의 제한은 HotXLS의 격차가 아닌 파일 형식에 구조적으로 내재된 것입니다. 재로드 후 통합 문서는 빈 사이드 테이블을 가진 새 TXLSWorkbook 인스턴스이며 XlsGetDrawingThemeColor는 False를 반환하고 ColorFormat.RGB로 대체됩니다
저장/열기를 통해 왕복 전달되는 셀 색상의 경우 대신 전용 IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor 진입점을 사용합니다 — 이들은 XFExt $087D 리치 색상 사이드 레코드를 활용하여 Excel 2007+ 전체에서 테마 idx + 색조를 그대로 왕복 전달합니다

예제

도형의 단색 채우기를 25% 어두운 색조로 accent5로 재색상화한 다음 통합 문서 사이드 테이블에서 테마 의도를 다시 읽어 속성 패널에 표시합니다. SaveAs / Open 후 사이드 테이블이 다시 비워지므로 지속적인 의도가 필요한 호출자는 자체 상태를 유지해야 합니다

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;

참조