HotXLS ドキュメント

XlsApplyThemeColorToDrawing 関数

ユニット: lxHandle
12 の Office テーマカラースロット(およびオプションのティント)のいずれかを、描画側の TXLSColorFormat に適用します(FillFormat.ForeColor と LineFormat.ForeColor が図形とグラフ要素に公開するのと同じハンドルです)。v2.62.0 以降で使用可能です。v2.64.0 では、同じプロセス内の後続の 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 の範囲のスペックスタイルの明暗調整

備考

このヘルパーは 1 回の呼び出しで 2 つの書き込みを実行します:
シングルプロセスのみの理由。 BIFF8 OfficeArt の 4 バイト ColorRef はインデックス/RGB/スキーム/sysColor バリアントをエンコードしますが、テーマ idx + ティントを保持できる XFExt $087D に類似した拡張レコードはありません。そのため、Save/Open ラウンドトリップの制限はファイル形式の構造的な制限であり、HotXLS のギャップではありません。再ロード後、ワークブックは空のサイドテーブルを持つ新しい TXLSWorkbook インスタンスとなり、XlsGetDrawingThemeColor は False を返して ColorFormat.RGB にフォールスルーします
Save/Open を通じてラウンドトリップするセルカラーには、専用の IXLSInterior.SetThemeColor / IXLSFont.SetThemeColor / IXLSBorder.SetThemeColor エントリポイントを代わりに使用してください。これらは XFExt $087D リッチカラーサイドレコードを活用して、Excel 2007+ を通じてテーマ idx + ティントを逐語的にラウンドトリップします

使用例

図形のソリッド塗りつぶしを accent5 に 25% 暗いティントで再着色し、プロパティパネルに表示するためにワークブックのサイドテーブルからテーマインテントを読み取ります。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;

関連項目